以下是我正在使用的数据结构:
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包中并应用函数(学习过程很慢,但我认为随着我得到更多的例子,它将变得更容易修补)。
感谢您的帮助!
答案 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)
llply
将l
ist作为输入,并将结果作为l
ist。并关注@ SimonO101的示例:如果所需的结果是d
ata帧,请将llply
更改为ldply
。