2016-05-07 11 views
-1

Ich bin ein Neuling zu R und suche Hilfe, um die Summen der ausgewählten Spalte für jede Zeile zu berechnen. Mein einfacher Datenrahmen ist wie folgt.So erhalten Sie rowSums für ausgewählte Spalten in R

data = data.frame(location = c("a","b","c","d"), 
      v1 = c(3,4,3,3), v2 = c(4,56,3,88), v3 =c(7,6,2,9), v4=c(7,6,1,9), 
      v5 =c(4,4,7,9), v6 = c(2,8,4,6)) 

Ich möchte die Summe der Spalten V1 bis V3 und V4 bis V6 für meine jede Zeile in einem neuen Datenrahmen.

x1 x2 
a 14 13 
b 66 18 
c 
d 

Ich habe etwas wie unten getan.

rowSums(data[,2:4][,5:7]) 

Aber etwas sollte in meinen Codes falsch sein. Vielen Dank im Voraus für jede Hilfe.

Antwort

1

Hier ist ein recht einfache Lösung mit apply.

output <- data.frame(x1 = apply(data[2:4], 1, sum) , 
         x2 = apply(data[5:7], 1, sum)) 

Ergebnis:

output 
> x1 x2 
> 1 14 13 
> 2 66 18 
> 3 8 12 
> 4 100 24 
0

Angabe der beiden Summierungen ausdrücklich:

cbind(x1=rowSums(data[,c('v1','v2','v3')]),x2=rowSums(data[,c('v4','v5','v6')])); 
##  x1 x2 
## [1,] 14 13 
## [2,] 66 18 
## [3,] 8 12 
## [4,] 100 24 
+0

aktuellen Datensatz hat große Anzahl von Variablen bekam. – sriya

0

Wir den Datensatz in eine listsplit und dann Reduce mit f="+" verwenden.

sapply(split.default(data[-1], rep(paste0("x", 1:2), each=3)), Reduce, f=`+`) 
#  x1 x2 
#[1,] 14 13 
#[2,] 66 18 
#[3,] 8 12 
#[4,] 100 24 
+0

Alle Antworten funktionieren gut. Vielen Dank . @Akrun was macht Reduce, f = '+' hier bitte? – sriya

+0

@Lio 'f' ist der Funktionsaufruf innerhalb der' Reduce'. Es führt die Summe für jedes Element in einer bestimmten Zeile des Datenrahmens aus. – akrun

1

Mein Sinn wäre DPLY zu verwenden:

require(dply) 
data %>% mutate(v2v4 = rowSums(.[2:4])) %>% mutate(v4v6 = rowSums(.[5:7])) %>% select(-(location:v6)) 

Ergebnis:

> newDf <- data %>% mutate(v2v4 = rowSums(.[2:4])) %>% mutate(v4v6 = rowSums(.[5:7])) %>% select(-(location:v6)) 
> newDf 
    v2v4 v4v6 
1 14 13 
2 66 18 
3 8 12 
4 100 24 
1

OK, wenn Sie eine separate Datenrahmen wollen:

> data.frame(X1=rowSums(data[,2:4]), X2=rowSums(data[,5:7])) 
+0

Diese Antwort liefert nicht die gewünschte Ausgabe in 'dat.frame' –

+1

Ich habe nie gesagt, dass es tut. Ich habe gesagt, dass Sie rowSums (Daten [, c (2: 4,5: 7)]) anstelle von rowSums (Daten [, 2: 4] [, 5: 7]) verwenden müssen. Wenn Sie einen Datenrahmen möchten, müssen Sie ihn nur kombinieren. – Juanjo

+0

Ich denke immer noch, dass Ihre Antwort nicht das in den Fragen geforderte Ergebnis zurückgibt, was ein "data.frame" wäre, wie die, die Sie in den anderen Antworten sehen können. –