Sto lavorando a un set di dati che include dati della comunità e molte delle colonne (specie) hanno molti zeri. Vorrei poter rilasciare queste colonne per alcune delle analisi che sto facendo, in base alla somma dell'intera colonna. Sono tentato di fare questo con un ciclo for, ma ho sentito che la applicano e funzioni sono meglio quando si sta utilizzando R. Il mio obiettivo è quello di rimuovere tutte le colonne con una somma inferiore a 15. ho utilizzato which()
per rimuovere le righe da fattori, ad esempio,Esclusione di colonne da un dataframe in base alle somme delle colonne
September<-which(data$Time_point=="September")
data<-data[-September,]
ed i due modi che ho provato colonne rimozione è quello di utilizzare apply()
:
data<-data[,apply(data,2,function(x)sum(x<=15))]
e utilizzando un disordinato ciclo for/if else combinata :
for (i in 6:length(data)){
if (sum(data[,i])<=15)
data[,i]<-NULL
else
data[,i]<-data[,i]
}
Nessuno di questi metodi ha funzionato. Sicuramente esiste un modo elegante per sbarazzarsi delle colonne in base a criteri logici?
str(head(data,10))
'data.frame': 10 obs. of 23 variables:
$ Core_num : Factor w/ 159 levels "152","153","154",..: 133 72 70 75 89 85 86 90 95 99
$ Cage_num : num 0 1 2 3 4 5 6 7 8 9
$ Treatment : Factor w/ 4 levels "","C","CC","NC": 1 2 2 2 2 2 2 2 2 2
$ Site : Factor w/ 10 levels "","B","B07","B08",..: 1 8 8 8 7 7 7 7 9 9
$ Time_point : Factor w/ 3 levels "","May","September": 1 2 2 2 2 2 2 2 2 2
$ Spionidae : num 108 0 0 0 0 0 0 0 0 0
$ Syllidae : num 185 0 0 0 3 8 0 1 4 1
$ Opheliidae : num 424 0 1 0 0 0 1 1 0 0
$ Cossuridae : num 164 0 7 3 0 0 0 0 0 0
$ Sternaspidae: num 214 0 0 6 1 0 11 9 0 0
$ Sabellidae : num 1154 0 2 2 0 ...
$ Capitellidae: num 256 1 10 17 0 3 0 0 0 0
$ Dorvillidae : num 21 1 0 0 0 0 0 0 0 0
$ Cirratulidae: num 17 0 0 0 0 0 0 0 0 0
$ Oligochaeta : num 3747 12 41 27 32 ...
$ Nematoda : num 410 5 4 13 0 0 0 2 2 0
$ Sipuncula : num 33 0 0 0 0 0 0 0 0 0
$ Ostracoda : num 335 0 1 0 0 0 0 0 0 0
$ Decapoda : num 62 0 4 0 1 0 0 0 0 0
$ Amphipoda : num 2789 75 17 34 89 ...
$ Copepoda : num 75 0 0 0 0 0 0 0 0 0
$ Tanaidacea : num 84 0 0 0 1 0 0 0 0 0
$ Mollusca : int 55 0 4 0 0 0 0 0 0 0
Sarebbe molto più facile aiutare se hai fornito alcuni dati riproducibili. Ad esempio, l'output di 'str (head (data, 10))' sarebbe probabilmente sufficiente. (Le versioni stampate dei tuoi dati sono generalmente inutili, poiché sono difficili da copiare + incollare in esempi e non forniscono informazioni su come i dati sono _stored_, che può essere cruciale.) – joran
Grazie a @joran. Ho modificato la domanda originale per contenere quell'output. Ci dispiace per l'inconvenienza! – Margaret