动态重新编码原始变量的某些值的数据帧的总和值

Sum values of dataframe recodifying certain values of original variables on the fly

假设我有以下数据框:

df <- data.frame(a=c(1,2,3,3,1), b=(c(1,9,1,2,3)), 
                 c=c(1,2,3,3,9), d=(c(1,2,3,9,1)))

我想对 a + b + c + d 的值求和,但每次这些变量的值为 9 时,我想求和 3 而不是 9。

我知道我可以通过使用以下语法重新编码每个变量来做到这一点:

df[,1:4][df[,1:4]==9]<-3

但我想用一个临时的 table 或一些允许我跳过此步骤的代码来完成。最重要的是,我不想错过每个变量的原始值,因为 9 对我需要做的其他操作有意义。

这就是我想要的结果:

df$sum <- c(4,9,10,11,8)

非常感谢,

Yatrosin

一个选项是 replace 值大于或等于 9 的元素和 3 并得到 rowSums

df$Sum <- rowSums(replace(df[1:4], df[1:4] >= 9, 3))
df$Sum
#[1]  4  9 10 11  8