1

我有以下 df 称为数据:

  ProbeID    SampleID ExperimID    Value    
1 2747406        1         2       6.44 
1 2747406        4         2       5.90

etc....

我正在尝试提取与 SampleID = 1 ( data[,2] = 1) 和 SampleID = 4 (data[,2]=4) 匹配的第 4 列 (data[,4]) 中的值

重要的是这些值与 SampleID 匹配并一起提取(即 SampleID 1 的值 = 6.44 和 SampleID 4 的值 = 5.90)。它们可以分成新的 df(x 和 y),理想情况下给我带有所有 SampleID 1 值的 x 和带有所有 SampleID 4 值的 y。我完全坚持这一点,非常感谢任何帮助。

目标是让两个新的数据框 x 和 y 看起来如下图所示:

x 为:

     SampleID    Value    
1       1        6.44 
etc..

和 y 是:

    SampleID     Value    
1       4        5.90
etc...
4

2 回答 2

2

这是简单的饲料split

dataBySample <- split(data, data$SampleID)

dataBySample一个包含data.frames与您所需输出相对应的元素的列表也是如此。


如果您真的想在全局环境中填充这些 data.frames,那么您可以执行以下操作

newnames <- paste0('sample', names(dataBySample))

for(i in seq_along(dataBySample)){
  assign(newnames[i], dataBySample[[i]])
}
# so now there are dataframes called sample1 and sample4
sample1
ProbeID SampleID ExperimID Value
1 2747406        1         2  6.44

sample4
ProbeID SampleID ExperimID Value
2 2747406        4         2   5.9

如果您将它们保留在列表中并且不会用它们污染全球环境,那么您对这些 data.frames 所做的几乎所有事情都会更容易控制。特别是,正如您在评论中指出的那样,您有 2405670 个样本。你真的想创建这么多的data.frames吗?


于 2012-12-04T01:42:18.173 回答
1

我认为您应该听 mnel 但如果您真的想用不相交的数据位使您的工作区混乱,那么请执行以下操作:

 res1 <- dfrm[ dfrm$sampleID == 1 , c("SampleID",    "Value") ]
 res4 <- dfrm[ dfrm$sampleID == 4 , c("SampleID",    "Value") ] 
于 2012-12-04T01:54:39.663 回答