我无法使用一致的语法在data.table中获得一致的输出 . 见下面的例子
d<- data.table(x=c(1,1,2,2), y=c(1,1,2,2))
# data.table shown below
# x y
1: 1 1
2: 1 1
3: 2 2
4: 2 2
d[, if (.N>1) .SD else NULL, by = .(x, y)]
# returns Empty data.table (0 rows) of 2 cols: x,y
.SD包含所有未分组的列,导致返回2个空data.frames . 当一个添加另一列/ data.table包含未分组的列时,将返回正确的输出 .
d[, if (.N>1) .SD else NULL, by = x]
# returns
x y
1: 1 1
2: 1 1
3: 2 2
4: 2 2
d<- data.table(x=c(1,1,2,2), y=c(1,1,2,2), t= 1:4)
d[, if (.N>1) .SD else NULL, by = .(x, y)]
# returns
x y t
1: 1 1 1
2: 1 1 2
3: 2 2 3
4: 2 2 4
我正在尝试找到一种方法来编写代码以返回出现重复次数的行,这些行适用于by列执行且不包含data.table中所有列的情况 . 为此,我尝试设置.SDcols = c(“x”,“y”),然而,列在输出中重复
d[, if (.N>1) .SD else NULL, by = .(x, y), .SDcols = c("x", "y")]
x y x y
1: 1 1 1 1
2: 1 1 1 1
3: 2 2 2 2
4: 2 2 2 2
有没有办法让d [,if(.N> 1).SD else NULL,by = colnames]返回所需的输出,而不管列名是否由d中的所有列组成?或者我是否需要使用if语句并分解2个案例?
1 回答
这是一种方法
这个
将
(x,y)
设为一个键;确定哪些
(x,y)
组满足标准;然后从
d
中选择这些组 .