我在R中有10个数据帧用于10个测试,它们都包含一个ID变量作为字符串,三个变量t1
,t2
和t3
都是测量时间。
并非所有数据帧都包含所有ID。
我想从10个数据帧中创建三个数据帧
由于存在缺失(并非所有参与者都参与了所有测试),因此我无法使用merge()
或cbind()
,而我对sqldf()
的尝试出错了。
我也不知道哪个ID变量我在所有10个数据帧中都有值。
我有点困惑 - >谢谢你的想法!!
答案 0 :(得分:0)
我将使用这个可重复的例子:
set.seed(42)
d <- replicate(n=10, list(data.frame(ID=rbinom(5,20,0.5), t1=runif(5), t2=runif(5), t3=runif(5))))
请注意,这是一个数据帧列表。如果您的表格是分开的,您可以使用d <- list(dataframe1, dataframe2, ...)
。
首先我们将变量t1
,t2
重命名为t1.i
,t2.i
,其中i
是数据帧的索引,以避免混淆:< / p>
for(i in seq(d)) names(d[[i]])[-1] <- paste(names(d[[i]])[-1], i, sep=".")
现在我们合并所有这些:
big <- Reduce(function(x,y)merge(x,y,all=TRUE), d)
这是一个包含31列的大表(每个数据帧ID
加3 t
),对于不存在的值填充NA
,按ID
排序(默认为{ {1}})。
现在你可以将其分组以获得你想要的东西:
merge