RowSums列集(如果满足多个列条件)

时间:2018-12-01 09:12:14

标签: r conditional rowsum

我希望对列的总数(在这种情况下为受教育年限)进行求和,但前提是值(被调查者的年龄)大于特定数目(> = 16)。列数大于示例(针对年龄和教育程度,列数最多为13),因此我希望找到一种有效的方法来实现RowSums,而无需依赖逐列总和并保持拟议数据帧的结构不变因为我希望以后再绑定更多列。

从此数据框中获取最佳方法是什么[...]

Age1 <- c(21,31,51,72)
Age2 <- c(22,33,34,54)
Age3 <- c(7,11,10,21)
Edu1 <- c(5,10,10,10)
Edu2 <- c(5,10,5,5)
Edu3 <- c(2,5,4,10)
df <- data.frame(Age1, Age2, Age3, Edu1, Edu2, Edu3)

[...]到TotEdu结果?

enter image description here

1 个答案:

答案 0 :(得分:2)

我们可以定义年龄和教育程度的列数(假设数字始终相同(此处均为3)),检查哪些年龄值大于等于16,并获得相应的教育程度并取rowSums

age_cols <- 1:3
edu_cols <- 4:6
df$Total_edu <- rowSums(df[edu_cols] * as.numeric(df[age_cols] >= 16))

df

#  Age1 Age2 Age3 Edu1 Edu2 Edu3 Total_edu
#1   21   22    7    5    5    2        10
#2   31   33   11   10   10    5        20
#3   51   34   10   10    5    4        15
#4   72   54   21   10    5   10        25