2012-03-10 15 views
5

Mi dispiace, sono sicuro che una domanda simile è già stata posta ma temo di non riuscire a trovarla. Voglio semplicemente riassumere un sacco di variabili all'interno di un dataframe. Come piccolo esempio, quello che mi piacerebbe fare è calcolare df $ e come sotto.somma di variabili all'interno di R dataframe

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 

Ma voglio esprimere dicendo df $ e < - "la somma di tutte le variabili tra A e D"

Grazie! Aiuta anche l'apprezzamento nel tagging.

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

non mi esprimo che avevo bisogno di molto chiaramente, ma ero ignorante di subset come mi è stato di rowSums.

+0

Se si può lavorare con una matrice/tavolo, '' addmargins' e margin.table' possono venire a portata di mano. –

risposta

10

Stai cercando 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 
> 

che si può ovviamente anche assegnare di nuovo in 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

sembra simile :) ma ho bisogno di fare riferimento per fare riferimento al nome della prima e dell'ultima colonna consecutiva anziché all'intero dataframe. Come potrei farlo? –

+0

Sottoinsiemi l'argomento andando in 'rowSums' di conseguenza. –

+0

Mi dispiace, questo è esattamente quello che sto chiedendo come fare. Continuerò a cercare e vedere se riesco a trovare una risposta prima di poter tornare a questa pagina. –

2

Siete alla ricerca di un modo per non esplicitamente scrivere a + b + c + d + ...?

Se è così, come su rowSums()

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

Grazie ... stesso commento di Dirk, sì, ma ho bisogno di fare riferimento per fare riferimento al nome della prima e dell'ultima colonna consecutiva piuttosto che all'intero dataframe. Come potrei farlo? –