2012-03-10 16 views
5

Przykro mi, jestem pewien, że podobne pytanie już zadano, ale obawiam się, że nie mogę go znaleźć. Po prostu chcę zsumować wiele zmiennych w ramach danych. Jako mały przykład, chciałbym obliczyć df $ e, jak poniżej.suma zmiennych w ramce danych 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 

Ale chcę wyrazić mówiąc df $ E < - "sumę wszystkich zmiennych między A i D"

Dziękujemy! Pomoc również doceniona w tagowaniu.

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

nie wyrazić, że muszę go bardzo wyraźnie, ale był tak nieświadomy subset jak byłem z rowSums.

+0

Jeśli można pracować z matrycą/stołu, '' margin.table' addmargins' i może się przydać. –

Odpowiedz

10

Szukasz 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 
> 

które można oczywiście przypisać powrotem do 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

wygląda tak :) ale muszę odnieść się do odniesienia do pierwszej i ostatniej kolejnej nazwy kolumny zamiast do całej ramki danych. Jak to zrobić? –

+0

Podzbiór argumentu odpowiednio na 'rowSums'. –

+0

Przykro mi, właśnie o to pytam, jak to zrobić. Będę ciągle sprawdzać i sprawdzać, czy mogę znaleźć odpowiedź, zanim wrócisz na tę stronę. –

2

Szukasz sposobu na nie wyraźnie napisać a + b + c + d + ...?

Jeśli tak, jak o rowSums()

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

Dzięki ... ten sam komentarz co do Dirka, tak, ale muszę odnieść się do pierwszej i ostatniej kolejnej nazwy kolumny, a nie do całej karty danych. Jak to zrobić? –

Powiązane problemy