使用R修剪多个数据帧中的数据

时间:2013-10-04 16:51:44

标签: r dataframe subset

以下是我正在使用的数据结构:

head(total_stats[[1]])



 cellID         X         Y Area   AvgGFP DeviationGFP   AvgRFP DeviationsRFP Slice totalGFP totalRFP
1      1  7.645614  92.10175  285 4.880702     4.795811 31.98246     12.402424     0     1391     9115
2      2 11.246544 225.18664  434 4.179724     4.792214 21.69816      7.471494     0     1814     9417
3      3 17.641860 346.75194  645 5.973643     6.199398 23.16279      9.691027     0     3853    14940
4      4  8.267218 441.30854  363 5.641873     6.714264 16.78788      5.220197     0     2048     6094
5      5  5.390845 480.99296  284 6.045775     8.907932 26.59507     10.562691     0     1717     7553
6      6  6.728365 529.86779  416 5.038462     5.083255 24.06971     10.818433     0     2096    10013

...

我在“total_stats”中有54个这样的数据帧,它们被称为slice1-54,每个包含~700行 - 每行对应一个单元格

我想根据列中的值排除单元格(行),然后将未排除的单元格(行)放入另一个名为“trimmed_stats”的对象中。

例如,我想排除以下单元格:

totalGFP < 2000

totalRFP < 9000

Area < 300

剩下的所有单元格(行)(totalGFP大于2000,totalRFP大于9000,大于50的区域)我想放入另一个名为“trimmed_stats”的对象,它保持相同的结构“ total_stats“(当然不包括不感兴趣的细胞)。

我知道这是可能的,但我很难将我的思维包裹在plyr包中并应用函数(学习过程很慢,但我认为随着我得到更多的例子,它将变得更容易修补)。

感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

我希望你能提供一个可重复的小例子,但这应该有所帮助:

#   Create a small function to extract the rows you are interested in
f <- function(x) x[ ! x$totalGFP < 2000 & ! x$totalRFP < 9000 & ! x$Area < 300 , ]

#  Apply it to each data.frame in your list
trim <- lapply( total_stats , f )

#  Combine the results into one data.frame if desired...
trimmed_stats <- do.call( rbind , trim ) 

答案 1 :(得分:1)

由于OP中提到了plyr,我们在这里:

library(plyr)
trimmed_stats <- llply(.data = total_stats, subset,
                       !totalGFP < 2000 & !totalRFP < 9000 & !Area < 300)

llplyl ist作为输入,并将结果作为l ist。并关注@ SimonO101的示例:如果所需的结果是d ata帧,请将llply更改为ldply