2013-10-04 46 views
0

以下是我與工作的數據結構:調整數據幀,使用R

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 

...

我有這些數據的54幀「total_stats」,他們被稱爲切片1-54幷包含約700行 - 每行對應於一個單元

我想根據列中的值排除單元格(行),然後將未排除的單元格(行)放入另一個對象稱爲「trimmed_stats」。

比如,我要排除以下細胞:

totalGFP < 2000 

totalRFP < 9000 

Area < 300 

所有的細胞都留下來(那些totalGFP大於2000,totalRFP大於9000,和麪積大於50)(行)我想放入另一個名爲「trimmed_stats」的對象,該對象保持「total_stats」的結構(當然不包括不感興趣的單元格)。

我知道這是可能的,但我很難包裝plyr軟件包並應用函數(學習過程很慢,但我認爲隨着我獲得更多示例,它將變得更容易修補)。

感謝您的幫助!

回答

1

由於plyr在OP所提到的,在這裏我們去:

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

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) 
+0

我猜測最後一步是不必要的。他們提到他們希望結果與原始「total_stats」對象具有相同的結構。 – A5C1D2H2I1M1N2O1R2T1

+0

@AnandaMahto是啊,同意了。這就是爲什麼我添加*如果需要*位!我忘了他們正在尋找*排除*這些行,所以'!'。 :-) –

+0

@ SimonO101 - 你將如何去保持每個切片分離在trimmed_stats?從我可以告訴的是,將所有未排除的單元組合成一個長數據框。讓我知道這是否沒有道理。 .. – user2813055