Sumar filas en data.frame o matrix

81

Tengo un marco de datos muy grande con filas como observaciones y columnas como marcadores genéticos. Me gustaría crear una nueva columna que contenga la suma de un número selecto de columnas para cada observación usando R.

Si tengo 200 columnas y 100 filas, me gustaría crear una nueva columna que tenga 100 filas con la suma de, digamos, las columnas 43 a 167. Las columnas tienen 1 o 0. Con la nueva columna que contiene la suma de cada fila, podré clasificar los individuos que tienen más marcadores genéticos.

Siento que es algo cercano a:

data$new=sum(data$[,43:167])
usuario483502
fuente

Respuestas:

106

puedes usar rowSums

rowSums(data) debería darte lo que quieres.

Greg
fuente
16
Y para el problema de OPdata$new <- rowSums(data[43:167])
Marek
6
Para ahorrarle tiempo a alguien, tal vez: ¡evite la confusión con la función rowsumque hace otra cosa!
Augustin
37

La función rowSums (como menciona Greg) hará lo que desee, pero está mezclando técnicas de subconjunto en su respuesta, no use "$" cuando use "[]", su código debería verse algo más como:

data$new <- rowSums( data[,43:167] )

Si desea utilizar una función distinta a la suma, consulte? Aplicar para aplicar funciones generales en filas o columnas.

Greg Snow
fuente
No estoy seguro de por qué recibí este error: Error en sumas de fila (datos de ingresos): 'x' debe ser numérico
munmunbb
1
@munmunbb, recibiste ese error porque incomeDatano es numérico. Use algo como str(incomeData)para ver qué es, luego posiblemente conviértalo en una matriz numérica.
Greg Snow
5

Vine aquí con la esperanza de encontrar una manera de obtener la suma en todas las columnas de una tabla de datos y tener problemas al implementar las soluciones anteriores. Una forma de agregar una columna con la suma en todas las columnas usa la cbindfunción:

cbind(data, total = rowSums(data))

Este método agrega una totalcolumna a los datos y evita el problema de alineación que se produce al intentar sumar TODAS las columnas utilizando las soluciones anteriores (consulte la publicación a continuación para obtener una discusión sobre este problema).

Agregar una nueva columna al error de matriz

Seeiespi
fuente
Consulte también dplyr :: mutate_all .
Paul Rougieux