0

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

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 和 Area 大于 50)我想放入另一个名为“trimmed_stats”的对象中,该对象保持与“total_stats”相同的结构(当然不包括不感兴趣的单元格)。

我知道这是可能的,但我很难把注意力集中在 plyr 包和应用函数上(学习过程很慢,但我认为随着我获得更多示例,它会变得更容易修补)。

感谢您的任何帮助!

4

2 回答 2

1

由于plyr在 OP 中提到过,我们开始:

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

llplylist 作为输入,并将结果作为list. 并遵循@SimonO101 的示例:如果所需的结果是data 帧,请更改llplyldply.

于 2013-10-04T17:07:20.237 回答
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 ) 
于 2013-10-04T16:57:29.503 回答