0

我在 R 中有 10 个测试的 10 个数据帧,它们都包含一个 ID 变量作为字符串和三个变量t1t2以及t3所有测量时间。

并非所有 ID 都在所有数据框中。

我想从我的 10 个数据帧中创建三个数据帧

  • 第一个带有来自所有数据帧的 t1 变量,第二个带有 t2 变量,第三个带有 t3 变量
  • 按 ID 变量排序
  • NA,其中一个数据帧不包含一个 ID 变量的值。

由于有遗漏(并非所有参与者都参加了所有测试),因此我无法使用merge()or cbind(),并且我的尝试sqldf()出错了。我也不知道我在所有 10 个数据帧中都有哪个 ID 变量的值。我有点困惑->谢谢你的想法!!

4

1 回答 1

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,重命名t2t1.i, t2.i,其中i是数据帧的索引,以避免混淆:

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(默认为merge)排序。

现在您可以对其进行子集化以获得您想要的:

t1 <- big[,c(1,grep("1", names(big)))]
t2 <- big[,c(1,grep("2", names(big)))]
t3 <- big[,c(1,grep("3", names(big)))]
于 2013-08-29T14:15:46.537 回答