2013-10-04 5 views
0

est que la structure de données de ce que je travaille avec:données TRIM multiples trames de données en utilisant 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 

...

J'ai 54 de ces trames de données dans « total_stats », ils sont appelées tranche1-54 et contiennent ~ 700 lignes chacune - chaque ligne correspond à une cellule

Je veux exclure des cellules (lignes) basées sur des valeurs dans des colonnes, puis placer les cellules (lignes) qui ne sont pas exclues dans un autre objet appelé "trimmed_stats".

Par exemple, je veux exclure les cellules suivantes:

totalGFP < 2000 

totalRFP < 9000 

Area < 300 

Toutes les cellules (lignes) qui sont laissés sur (ceux qui totalGFP supérieur à 2000, totalRFP supérieur à 9000, et superficie supérieure à 50) Je veux mettre dans un autre objet appelé "trimmed_stats", qui maintient la même structure de "total_stats" (en excluant bien sûr les cellules qui ne sont pas d'intérêt). Je sais que c'est possible, mais j'ai du mal à faire le tour du paquet et j'applique des fonctions (le processus d'apprentissage est lent, mais je pense qu'avec plus d'exemples, il sera plus facile de bricoler).

Merci pour toute aide!

Répondre

1

Depuis plyr a été mentionné dans OP, on y va:

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

llply prend un l ist comme entrée, et donne le résultat en tant que l ist. Et pour suivre l'exemple de @ SimonO101: si le résultat souhaité est plutôt une d ata frame, remplacez llply par ldply.

1

Je souhaite que vous donnez un petit exemple reproductible, mais cela devrait aider:

# 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

Je suppose que la dernière étape est inutile. Ils ont mentionné qu'ils voulaient que le résultat ait la même structure que l'objet original "total_stats". – A5C1D2H2I1M1N2O1R2T1

+0

@AnandaMahto oui, d'accord. C'est pourquoi j'ai ajouté le bit * si désiré *! J'ai aussi oublié qu'ils cherchent à * exclure * ces lignes, donc '!'. :-) –

+0

@ SimonO101 - comment voulez-vous garder chaque tranche séparée dans trimmed_stats? De ce que je peux dire c'est combiner toutes les cellules non-exclues dans une longue trame de données. Faites-moi savoir si cela n'a pas de sens. .. – user2813055

Questions connexes