我正在尝试根据条件计算 data.table 的多个 .N
我有一个数据表
SD = data.table(x=c(1,1,1,1,2,2,2,2), y=c("a", "a", "b", "b","a", "a",
"b", "b"), z= c("x", "x", "y","y", "x","z","x","w"))
我想计算两件事:
- x 和 y 的每个组合的计数
我就是这样做的
SD[,.N, .(x,y)]
输出就是我想要的
x y N
1: 1 a 2
2: 1 b 2
3: 2 a 2
4: 2 b 2
- x 和 y 的每个组合的计数,其中 z == "x"
作为一个快速解决方案,我这样做了
SD[z == "x", .N, .(x,y)]
merge.data.table(SD[,.N, .(x,y)],
SD[z == "x", .N, .(x,y)],
by = c('x','y'), all.x =TRUE)`
有没有什么方法可以在一行代码中完成这两项操作而不需要连接? 它可以工作,但由于 data.table 太大,需要很长时间
感谢任何帮助
最佳答案
这个怎么样:
SD[, .(.N, count2 = sum(z == 'x')), .(x,y)]
# x y N count2
# 1: 1 a 2 2
# 2: 1 b 2 0
# 3: 2 a 2 1
# 4: 2 b 2 1
除了按唯一的 x-y 组合计算行数之外,我们还计算每个 x-y 组合中 z == 'x'
的行数。
关于r - data.table 中的 .N 带条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64332589/