2012-03-10 11 views
5

Lo siento, estoy seguro de que ya se ha hecho una pregunta similar pero me temo que no puedo encontrarla. Simplemente quiero sumar muchas variables dentro de un marco de datos. Como un pequeño ejemplo, lo que me gustaría hacer es calcular df $ e como a continuación.suma variables dentro del marco de datos R

df <- data.frame(a=c(1,2,3,4,5), b=(c(6,7,8,9,10)), 
       c=c(1,2,3,4,5), d=(c(6,7,8,9,10))) 

df$e <- with(df, a+b+c+d) # this is the right answer 

Pero quiero expresarlo diciendo df $ e < - "la suma de todas las variables entre A y D".

¡Gracias! Ayuda también apreciada en el etiquetado.

RESPUESTA: df$e <- rowSums(subset(df, select=a:d))

No expresé que tenía muy claro, pero yo estaba tan ignorante de subset como era de rowSums.

+0

Si se puede trabajar con una matriz/tabla, '' addmargins' y margin.table' pueden venir a mano. –

Respuesta

10

¿Está buscando rowSums()?

> df <- data.frame(a=c(1,2,3,4,5), b=(c(6,7,8,9,10)), 
+     c=c(1,2,3,4,5), d=(c(6,7,8,9,10))) 
> with(df, a+b+c+d) 
[1] 14 18 22 26 30 
> rowSums(df) 
[1] 14 18 22 26 30 
> 

la que por supuesto puede también asignar de nuevo en df:

> df$e <- rowSums(df) 
> df 
    a b c d e 
1 1 6 1 6 14 
2 2 7 2 7 18 
3 3 8 3 8 22 
4 4 9 4 9 26 
5 5 10 5 10 30 
> 
+0

parece :) pero necesito referirme a la referencia del primer y el último nombre de columna consecutivos en lugar de a la dataframe completa. ¿Como podría hacerlo? –

+0

Subconjunto el argumento entrando en 'rowSums' en consecuencia. –

+0

Lo siento, eso es exactamente lo que estoy preguntando cómo hacer. Seguiré buscando y veré si puedo encontrar una respuesta antes de que puedas volver a esta página. –

2

¿Está buscando una manera de no escribir explícitamente a + b + c + d + ...?

Si es así, ¿qué hay de rowSums()

df$e <- with(df, rowSums(df)) 
+0

Gracias ... mismo comentario que Dirk, sí, pero necesito referirme a la referencia del primer y el último nombre de columna consecutivos en lugar de a la dataframe completa. ¿Como podría hacerlo? –

Cuestiones relacionadas