Estoy trabajando en un conjunto de datos que incluye datos de la comunidad, y muchas de las columnas (especies) tienen muchos ceros. Me gustaría poder soltar estas columnas para algunos de los análisis que estoy haciendo, basados en la suma de toda la columna. Estoy tentado de hacer esto con un bucle for, pero he oído que la aplicación y las funciones son mejores cuando se usa R. Mi objetivo es eliminar todas las columnas con una suma de menos de 15. Tengo which()
utilizado para eliminar filas de factores, por ejemplo,Excluyendo columnas de un marco de datos basado en sumas de columna
September<-which(data$Time_point=="September")
data<-data[-September,]
y las dos maneras que he probado columnas quitar es mediante el uso de apply()
:
data<-data[,apply(data,2,function(x)sum(x<=15))]
y mediante el uso de un desordenado para lazo/combo si otra cosa :
for (i in 6:length(data)){
if (sum(data[,i])<=15)
data[,i]<-NULL
else
data[,i]<-data[,i]
}
Ninguno de estos métodos ha funcionado. Sin duda, hay una forma elegante de deshacerse de las columnas en función de criterios lógicos.
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
Sería mucho más fácil ayudar si proporcionó algunos datos reproducibles. Por ejemplo, la salida de 'str (head (data, 10))' probablemente sea suficiente. (Las versiones impresas de sus datos generalmente son inútiles, ya que son difíciles de copiar y pegar en ejemplos, y no proporcionan información sobre cómo se almacenan los datos, lo que puede ser crucial). – joran
Gracias @joran. He editado la pregunta original para contener esa salida. ¡Lo siento por los inconvenientes ocasionados! – Margaret