2016-08-13 3 views
0

insgesamt Zeilensummierungsspalten hinzu Ich habe ein Datenframe, das nur zu mehreren Volume-Spalten erstellt wird, und ich möchte eine Gesamtspalte namens Test erstellen, die in dem Datenframe sitzt. Der folgende Code funktioniert, wenn ich nur test <- ... setze, aber wenn ich summary_transposed_no_time$ auf der linken Seite hinzufüge, scheint der Code es nicht dem Dataframe hinzuzufügen.Fügen Sie in einem Datenrahmen in R

Ich würde auch gerne wissen, wie ich dieses Stück Code entwickeln konnte, so dass ich Test erstellen konnte, um alle Spalten minus Spalte 1 zu sein, und später im Prozess eine weitere Testspalte erstellen (vielleicht Test2 genannt) eine Zusammenfassung aller Spalten minus Spalte 2 - ich die Spaltenpositionen hart codieren können, aber nicht die Spaltennamen (wie sie in Namenskonvention jedes Mal, wenn der Code ausgeführt ändern können), so habe ich sie hier nicht enthalten

w <- ncol(summary_transposed_no_time) 
summary_transposed_no_time$test <- apply(summary_transposed_no_time[,c(1:w)], 1, sum) 

Beispiel für summary_transposed_no_time:

postal_dist_a | postal_dist_b | postal_dist_c 
------------- | ------------- | ------------- 
20   | 25   | 15 
25   | 40   | 23 
31   | 32   | 19 
24   | 39   | 17 
37   | 19   | 26 

Wunschergebnis Spalten innerhalb summary_transposed_no_time:

postal_dist_a | postal_dist_b | postal_dist_c | test 
------------- | ------------- | ------------- | ------------- 
20   | 25   | 15   | 60 
25   | 40   | 23   | 88 
31   | 32   | 19   | 82 
24   | 39   | 17   | 80 
37   | 19   | 26   | 82 
+0

Ihr Beispiel ist nicht reproduzierbar. Siehe https://StackOverflow.com/help/mcve –

Antwort

1

Sie sollten ein reprocucible Beispiel liefern. Aber wenn deine Frage wirklich nur geht, wie man Zeilenumbrüche durchführt, würde ich lieber die eingebaute Funktion rowSums verwenden. Ihr Code wäre:

set.seed(1) 
# I recreate a table more or less like yours 
summary_transposed_no_time=data.frame(matrix(rnorm(1000),ncol=5)) 
n=ncol(summary_transposed_no_time) 

# Test that contains the rowsum 
summary_transposed_no_time$test=rowSums(summary_transposed_no_time) 

# test1 rowsum minus column 1 
summary_transposed_no_time$testm1=rowSums(summary_transposed_no_time[,2:n]) 
# test2 rowsum minus column 2 
summary_transposed_no_time$testm2=rowSums(summary_transposed_no_time[,c(1,3:n)]) 
#test_i minus column i 
i=3 
summary_transposed_no_time$testmi=rowSums(summary_transposed_no_time[,c(1:n)][,-i]) 

#check on first line : 
sum(summary_transposed_no_time[1,1:n])==summary_transposed_no_time$test[1] 
sum(summary_transposed_no_time[1,2:n])==summary_transposed_no_time$testm1[1] 
sum(summary_transposed_no_time[1,c(1,3:n)])==summary_transposed_no_time$testm2[1] 
sum(summary_transposed_no_time[1,c(1:2,4:n)])==summary_transposed_no_time$testmi[1] 
+0

Danke Arault, ich führe die von Ihnen bereitgestellte Zeile aus: summary_transposed_no_time $ testm1 = rowSums (summary_transposed_no_time [, 1: n]) mit einer ncoa Zahl und einem Ausdruck vor und nach dem Schritt. Die Zahl, die von ncols gedruckt wird, geht von 132 vor der Erstellung von testm1 nach 133, aber ich kann die Spalte testm1 nicht finden. Nicht sicher, was ich falsch mache? Ich lief den Tisch, den Sie erstellt haben, und ich kann testm1 darin sehen? –

+0

Das ist seltsam, was passiert, wenn Sie summary_transposed_no_time $ testm1 [1,1] tun? Denn wenn sich die Anzahl der Spalten geändert hat, muss es etwas erzeugt haben. Versuchen Sie Colnames (summary_transposed_no_time), wenn es nicht funktioniert, um den Namen der Spalten zu sehen. Ich sehe in Ihrem Kommentar einen kleinen Fehler, es ist summary_transposed_no_time [, ** 2 **: n], nicht summary_transposed_no_time [, ** 1 **: n] in der Funktion. – Arault

+0

Danke nochmals, [1,1] und [, 1: n] beide führen dazu, dass testm1 im 'colnames()' Ergebnis angezeigt wird, aber nicht sichtbar, wenn ich den Frame öffne. Als SAS-Entwickler habe ich die Annahme gemacht, dass das neue Feld bei der RHS des Frames sein wird, ist das der Fall? Nachdem ich das gesagt habe, habe ich alle Spalten angesehen und es ist definitiv nicht da? –

0

Ich habe gefunden, wie man eine "total_" für jede Spalte innerhalb der df erstellen. total_1 ist die Summe aller Spalten minus Spalte 1, total_2 die Summe aller Spalten minus Spalte 2 etc.

n=ncol(summary_transposed_no_time) 

for (h in 1:ncol(summary_transposed_no_time)) { 

    summary_transposed_no_time[,paste0("total_",h)] <- rowSums(summary_transposed_no_time[,c(1:n)][,-h]) 
    m = ncol(summary_transposed_no_time) 
    print(paste("added in a total columns for region", h, "so the column count is now : ",m)) 

} # end for (h in 1:nrow(filtered_data_contents)){ 
Verwandte Themen