【问题标题】:Creating rowSums of one variable conditional on the value of another variable in R根据 R 中另一个变量的值创建一个变量的 rowSums
【发布时间】:2016-11-29 15:55:21
【问题描述】:

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

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

【问题讨论】:

  • 使用 ifelse 函数
  • 我遇到了一些麻烦,因为我可以使用 ifelse 为 var11 创建缺失值,但我不确定如何使用 ifelse 为 var11 指定 var1 - var10 的缺失值。有没有办法根据 var11 的值指定 var1-var10 上的缺失值?
  • 类似ifelse(var11 == 1, rowSums(...), NA)?
  • 我们正在苦苦挣扎,因为您没有提供可重现的示例。
  • 是的! ifelse(var11 == 1, rowSums(...), NA) 工作得很好。谢谢!这是有用的反馈——我将在未来提供可重复的示例,对此感到抱歉。

标签: r sum conditional subset


【解决方案1】:

首先我创建一个示例数据:

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

【讨论】:

    最近更新 更多