R data.table:如何根据条件按组对变量求和?

Sha*_*ang 2 aggregate r dataframe data.table

假设我有以下 R data.table(尽管我也很高兴使用基础 R、data.frame)

library(data.table)

dt = data.table(Category=c("First","First","First","Second","Third", "Third", "Second"), Frequency=c(10,15,5,2,14,20,3), times = c(0, 0, 0, 3, 3, 1))

> dt
   Category Frequency times
1:    First        10     0
2:    First        15     0
3:    First         5     0
4:   Second         2     3
5:    Third        14     3
6:    Third        20     1
7:   Second         3     0
Run Code Online (Sandbox Code Playgroud)

如果我想按类别汇总频率,我将使用以下内容:

data[, sum(Frequency), by = Category]
Run Code Online (Sandbox Code Playgroud)

但是,假设我想求和Frequency当Category且仅当times非零且不等于NA?

如何根据单独列的值使该总和成为条件?

编辑:对这个明显的问题表示歉意。快速补充:如果某一列的元素是字符串怎么办?

例如

> dt
   Category Frequency times
1:    First        ten    0
2:    First        ten    0
3:    First        five   0
4:   Second        five   3
5:    Third        five   3
6:    Third        five   1
7:   Second        ten    0
Run Code Online (Sandbox Code Playgroud)

Sum()不会计算tenvs的频率five

sin*_*dur 5

记住逻辑data.table:dt[i, j, by],即dt使用子集行i,然后计算j分组依据by。

dt[times != 0 & !is.na(times), sum(Frequency), by = Category]
   Category V1
1:   Second  2
2:    Third 34
Run Code Online (Sandbox Code Playgroud)

  • 那么你不能使用“sum()”,除非你先转换为数字。 (2认同)