2016-11-29 38 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 
相关问题