使用sum分组data.table?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (109)

我有一个数据框,我想用户分组并找到数量的总和。

library(data.table)
x = read.table('C:/Users/user/Desktop/20180911_Dataset_b.csv',encoding = 'UTF-8',sep =',')

dt = data.table(x)

colnames(dt)
"dates_d" "user" "proj" "quantity"   

quantity是这样的:

quantity
1
34
12
13
3
12
-
11
1

我听说这data.table library很快,所以我想用它。

我用Python制作但不知道如何在R中做到这一点。

提问于
用户回答回答于

由于历史记忆限制问题,R将数据读取为因子。当列中存在类似字符的条目时,整列将作为字符向量读入。现在使用RAM更容易获得,您可以先将数据作为字符串读入,以便它保持为字符向量而不是因子。

然后as.numeric在求和之前使用转换为实数值。无法转换为数字的字符串将转换为NA。na.rm=TRUE忽略总和中的NAs。

考虑以上所有因素:

library(data.table)
#you might want to check out the data.table::fread function to read the data directly as a data.table
x = read.table('C:/Users/user/Desktop/20180911_Dataset_b.csv',encoding = 'UTF-8',sep =',', stringsAsFactors=FALSE)

setDT(x)[, sum(as.numeric(quantity), na.rm=TRUE), by=.(user)]
用户回答回答于
library(dplyr)

dt[dt == "-" ] = NA

df <- dt %>% group_by(user) %>%
        summarise(qty = sum(!is.na(quantity)))

扫码关注云+社区

领取腾讯云代金券