根据R中另一个变量的值创建一个变量的rowSums

时间:2016-11-29 15:55:22

标签: r sum conditional subset

我希望使用R中的rowSums函数计算var1到var10的总和,但仅限于var11等于1的行。

我尝试对数据进行子集化,以便仅为var11等于1的数据创建var1-var10的总和,然后使用子集化的数据帧重新合并原始数据帧。这个问题是它导致我的主数据集排除var11等于1的所有变量的所有行,当我想保留完整数据集的那些行,但是它们只被指定为NA var1-var10的总和。

1 个答案:

答案 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