我无法获得一致的输出data.table
使用一致的语法。请参阅下面的示例
library(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
当所有列都用于分组时by
, .SD
为空,导致空data.table
被退回。
当添加另一列时,.SD
包含未分组的列,则返回正确的输出。
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
我正在尝试找到一种方法来编写代码以返回出现重复次数的行,该方法适用于按列包含或不包含 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
声明并分解这两个案件?