基于字符向量值对R中的多个数据帧进行子集化

时间:2013-04-05 18:00:32

标签: r data-manipulation

我有6个数据框,每列有2列,用于“id”和“value”以及不同的行数。 它们被标记为p1,p2 .... p6,看起来像这样

id          value_p1
Jane C      9.713457e-01
Claire K    1.260160e-01
Brett F     4.933005e-0
Jen S       0.56

我现在有一个字符向量,它包含名为id_ intersect:

的所有6个数据集的名称交叉
c("Jane C", "Claire K","Brett F") 

我现在想要创建一个新数据框,它只是每个数据框中包含id_intersect的部分的子集,并在每个数据框中保留交叉ID的值。

id          value_p1      value_p2.............value_p6
Jane C      9.713457e-01  0.87                 .098
Claire K    1.260160e-01  0.89                 .005
Brett F     4.933005e-0   0.002                .035

我真的坚持这个,我对R很新,所以任何帮助都非常感激。 感谢。

1 个答案:

答案 0 :(得分:2)

您可以在Reduce使用merge

 ll <- list(p1,p2,...,p6)
 Reduce(merge,ll) ## 

这是一个可重复的例子。首先,我在列表中创建数据框

ll <- lapply(1:6, function(x) {
  id <- c(letters[1:3],letters[3+x])
  dat <- data.frame(id=id, value=rnorm(4))
  names(dat) <- c('id',paste('value',x,sep='_'))
  dat

})

然后

Reduce(merge,ll)
        id     value_1     value_2    value_3   value_4      value_5    value_6
1  Brett F -0.09242725 -0.03908275  0.5366957 0.4926749  0.830829230  1.4868564
2 Claire K -0.27487913 -0.13733120 -0.2708968 0.1720550 -0.003194644 -0.6328486
3   Jane C -1.56306487 -0.75655434  0.1806619 0.2482159 -1.075606294  1.9711559