【发布时间】:2017-11-11 12:54:14
【问题描述】:
我有一个可能最好近似为的数据框:
library(data.table)
z <- rep("z",5)
y <- c(rep("st",2),rep("co",2),"fu")
var1 <- c(rep("a",2),rep("b",2),"c")
var2 <- c("y","y","y","z","x")
transp <- c("bus","plane","train","bus","bus")
sample1 <- sample(1:10, 5)
sample2 <- sample(1:10, 5)
df <- cbind(z,y,var1,var2,transp,sample1,sample2)
df<-as.data.table(df)
> df
z y var1 var2 transp sample1 sample2
1: z st a y bus 4 3
2: z st a y plane 10 7
3: z co b y train 8 9
4: z co b z bus 1 5
5: z fu c x bus 6 4
表中已存在 var1 和 var2 的所有唯一组合。我想扩展表格,以便 var1/var2 的所有组合都包含在列表中找到的所有 transp 选项:
transtype <- c("bus","train")
注意“plane”是 df 中的一个选项,但不是 transtype。我想保留包含 transp="plane" 但不通过添加带有“plane”的行来扩展的行。 z 和 y 列需要填写适当的值,并且 sample1 和 sample2 应该是 NA。结果应该是:
> result
z y var1 var2 transp sample1 sample2
1: z st a y bus 4 3
2: z st a y plane 10 7
3: z st a y train NA NA
4: z co b y train 8 9
5: z co b y bus NA NA
6: z co b z bus 1 5
7: z co b z train NA NA
8: z fu c x bus 6 4
9: z fu c x train NA NA
我基于Fastest way to add rows for missing values in a data.frame? 和Data.table: Add rows for missing combinations of 2 factors without losing associated descriptive factors 提出的data.table 选项最终扩展了var1 和var2 的所有唯一组合,而不仅仅是表中已经存在的组合。而且我不知道如何保持 z 和 y 的值。像这样:
setkey(df, var1, var2, transp)
x<-df[CJ(var1, var2, transp, unique=T)]
也许我应该使用 dplyr?或者,也许我错过了一些简单的东西?我浏览了 data.table 文档,但找不到解决方案。
【问题讨论】:
-
所以,对于
(z, y, var1, var2)的每个独特组合...如果没有公共汽车或火车的实例,则将其添加到NA? -
继承 z 和 y 的困难在于决定使用单个表而不是多个表。您想保留它们,因为它们是与(显然)var1 关联的属性。应该有一个包含该关系的单独表。
标签: r data.table dplyr