Сумма значений данных, перекодирующих определенные значения исходных переменных на лету

Допустим, у меня есть следующий фрейм данных:

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

но я хотел бы сделать это с временной таблицей или некоторым кодом, который позволяет мне пропустить этот шаг. Кроме того, я не хочу пропустить исходное значение каждой переменной, потому что цифры 9 будут иметь значение для других операций, которые мне нужно сделать.

Это будет результат, который я хотел бы получить:

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

Большое спасибо,

Yatrosin

1 ответ

Решение

Одним из вариантов будет replace элементы, имеющие значения, большие или равные 9 с 3, и получают rowSums

df$Sum <- rowSums(replace(df[1:4], df[1:4] >= 9, 3))
df$Sum
#[1]  4  9 10 11  8
Другие вопросы по тегам