2013-10-04 2 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», они называются slice1-54 и содержат ~ 700 строк каждый - каждая строка соответствует ячейке

Я хочу исключить ячейки (строки) на основе значений в столбцах, а затем поместить ячейки (строки), которые не исключаются в другой объект называется "trimmed_stats".

Например, я хочу, чтобы исключить следующие клетки:

totalGFP < 2000 

totalRFP < 9000 

Area < 300 

Все ячейки (строки), которые остаются в течение (те с totalGFP больше, чем 2000, totalRFP больше, чем 9000, и зона больше чем 50) Я хочу добавить другой объект под названием «trimmed_stats», который поддерживает ту же структуру «total_stats» (исключая, конечно, ячейки, которые не представляют интереса).

Я знаю, что это возможно, но мне трудно переносить мысли вокруг пакета plyr и применять функции (процесс обучения медленный, но я думаю, что, когда я получу больше примеров, станет легче возиться).

Спасибо за любую помощь!

ответ

1

Поскольку plyr упоминается в ОП, здесь мы идем:

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

llply занимает l IST, как ввода, и дает результат как l ist. И следовать примеру @ SimonO101: если желаемым результатом является d ata frame, измените 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

@ Ананда Махто да, согласился. Вот почему я добавил *, если хотите * бит! Также я забыл, что они ищут * исключить * эти строки, поэтому '!'. :-) –

+0

@ SimonO101 - как бы вы относились к тому, чтобы каждый кусочек разделялся в trimmed_stats? Из того, что я могу сказать, это объединение всех исключаемых ячеек в один длинный фрейм данных. Дайте мне знать, если это не имеет смысла. .. – user2813055

Смежные вопросы