我希望使用R中的rowSums函数计算var1到var10的总和,但仅限于var11等于1的行。
我尝试对数据进行子集化,以便仅为var11等于1的数据创建var1-var10的总和,然后使用子集化的数据帧重新合并原始数据帧。这个问题是它导致我的主数据集排除var11等于1的所有变量的所有行,当我想保留完整数据集的那些行,但是它们只被指定为NA var1-var10的总和。
答案 0 :(得分: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