2016-11-29 4 views
0

Ich hoffe, berechnen Sie die Summe von var1 bis var10 mit der Funktion rowsSums in R, aber nur für die Zeilen, in denen var11 gleich 1.Erstellen von rowSums einer Variablen bedingt durch den Wert einer anderen Variablen in R

Ich habe versucht, meine Daten zu unterteilen, um eine Summe von var1-var10 nur für Daten zu erstellen, in denen var11 gleich 1 ist, und dann den ursprünglichen Datenrahmen mit dem unterteilten Datenrahmen erneut verknüpft. Das Problem damit ist, dass es zu meinem Hauptdatensatz führt, der alle Zeilen für alle Variablen ausschließt, in denen var11 gleich 1 ist, wenn ich diese Zeilen für das vollständige Dataset beibehalten möchte, sie aber nur für die Summe als NA angeben lassen soll von var1-var10.

+0

Verwenden Sie die ifelse Funktion – user1945827

+0

I hatte einige Probleme damit, weil ich iffelse verwenden kann, um fehlende Werte für var11 zu erstellen, aber ich war nicht s Wie gebe ich fehlende Werte für var1 - var10 mit ifelse für var11 an. Gibt es eine Möglichkeit, fehlende Werte für var1-var10 basierend auf dem Wert von var11 anzugeben? – Calinadian

+0

Etwas wie 'ifelse (var11 == 1, rowSums (...), NA)'? –

Antwort

0

Zunächst erstelle ich eine Beispieldaten:

m1=matrix(sample(x = 1:10, size = 100, replace = T), nrow=10, ncol=10) 
m2= c(sample(1:3, size=10, replace=T)) 
df = data.frame(cbind(m1, m2)) 
names(df) = c('var1', 'var2', 'var3', 'var4', 'var5', 'var6', 'var7', 'var8', 'var9', 'var10', 'var11') 

, die unten wie folgt aussieht:

df 
# var1 var2 var3 var4 var5 var6 var7 var8 var9 var10 var11 
# 1 10 5 1 9 1 6 7 3 8  3  1 
# 2 10 10 3 9 4 10 4 3 10  6  1 
# 3 10 9 3 6 9 6 1 5 10  1  2 
# 4  7 5 2 8 10 9 9 3 3  4  2 
# 5  9 8 8 10 1 6 7 7 3  7  2 
# 6  5 5 1 1 4 1 6 6 8  2  1 
# 7  3 6 9 6 9 1 1 8 6  8  2 
# 8  3 10 10 2 2 10 4 7 7  2  2 
# 9  4 10 1 9 4 4 2 2 6  8  3 
# 10 3 10 2 5 5 10 1 7 6  4  2 

Dann werde ich die Konditionierung tun:

df$ROWSUMS=NA 
df[df$var11 == 1, 'ROWSUMS']=rowSums(df[df$var11 == 1,1:10]) 
df 

# var1 var2 var3 var4 var5 var6 var7 var8 var9 var10 var11 ROWSUMS 
# 1 10 5 1 9 1 6 7 3 8  3  1  53 
# 2 10 10 3 9 4 10 4 3 10  6  1  69 
# 3 10 9 3 6 9 6 1 5 10  1  2  NA 
# 4  7 5 2 8 10 9 9 3 3  4  2  NA 
# 5  9 8 8 10 1 6 7 7 3  7  2  NA 
# 6  5 5 1 1 4 1 6 6 8  2  1  39 
# 7  3 6 9 6 9 1 1 8 6  8  2  NA 
# 8  3 10 10 2 2 10 4 7 7  2  2  NA 
# 9  4 10 1 9 4 4 2 2 6  8  3  NA 
# 10 3 10 2 5 5 10 1 7 6  4  2  NA 
Verwandte Themen