【发布时间】:2015-11-06 22:35:45
【问题描述】:
假设我有一个 data.table
col1 col2 col3
a 123 1
a 433 2
a 322 3
b 43 1
b 4333 2
c 43 1
在上表中,col1 的每个类别应该有 3 行。但只有类别 a 有 3 行。因此,我想为 col1 的其他类别的缺失案例插入带有 NA 的空白行。输出看起来像
col1 col2 col3
a 123 1
a 433 2
a 322 3
b 43 1
b 4333 2
b NA 3
c 43 1
c NA 2
c NA 3
如何通过一次函数调用来实现它?
【问题讨论】:
-
DT[CJ(col1=col1, col3=col3, unique=TRUE), on=c("col1","col3")]。不得不重复这样的列名很烦人。在下一个版本中,可以使用DT[CJ(col1,col3,unique=TRUE), on=c("col1","col3")]。如果你加载 tidyr,setDT(complete(DT,col1,col3))是一个选项。它可能效率较低。 -
@Frank 这太棒了。如果我想在外部提供最大参数(在本例中为 3)怎么办?也就是说,我想说如果
c的行数小于 3,那么只插入剩余的行(在这种情况下为 2 行)。或者如果行数小于 2,那么只插入剩余的行(在这种情况下为 1)?我该怎么做? -
我不太明白这个问题。也许你应该把它作为一个新问题发布(因为你已经有两个答案了)..?
-
这是我过去一两个月看到的至少 2-3 个问题的重复。
标签: r dataframe data.table