Сумма значений данных, перекодирующих определенные значения исходных переменных на лету
Допустим, у меня есть следующий фрейм данных:
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