2016-11-29 39 views
0

我希望使用R中的rowSums函數計算var1到var10的總和,但只適用於var11等於1的行。創建一個變量的行數據,其條件取決於R中另一個變量的值

我已經嘗試對我的數據進行子集化,只爲var11等於1的數據創建var1-var10的總和,然後用子集數據框重新組合我的原始數據框。與此相關的問題是,它導致我的主數據集排除var11等於1的所有變量的所有行,當我想保留完整數據集的那些行時,但只將它們指定爲NA var1-var10。

+0

使用ifelse功能 – user1945827

+0

我在這方面遇到了一些麻煩,因爲我可以使用ifelse爲var11創建缺失值,但我不是s如何使用varel的ifelse指定var1 - var10的缺失值。有沒有一種方法可以根據var11的值在var1-var10上指定缺失值? – Calinadian

+0

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

回答

0

首先我創建了一個樣本數據:

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') 

它看起來象下面這樣:

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 

然後,我會做調理:

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 
相關問題