Я новичок в dplyr / tidyverse, и я хотел бы суммировать строки набора данных, если значения в данном столбце (столбцах) превышают данное значение. Например, учитывая этот кадр данных,
a<-c(2,3,2,1,0)
b<-c(2,3,3,2,1)
z<-c(3,2,1,1,0)
data.abz <- data.frame(a,b,z)
data.abz
a b z
1 2 2 3
2 3 3 2
3 2 3 1
4 1 2 1
5 0 1 0
Я хотел бы суммировать по строкам, если значение в столбце a или b больше 1 и если значение в столбце z больше 0. Если условие не выполняется, сумма строки равна 0. Например,
учитывая предыдущий кадр данных, я хотел бы получить следующее,
a b z sum_values
1 2 2 3 7
2 3 3 2 8
3 2 3 1 6
4 1 2 1 3
5 0 1 0 0
Последние две строки не удовлетворяют условию, и поэтому им было присвоено значение 0. Это то, что я сделал, но я уверен, что есть лучший способ добиться того же.
data.abz <- data.frame(a,b,z) %>%
mutate_at(vars(c(a,b)),
function(x) case_when(x < 2 ~ 0, TRUE~as.double(x)))%>%
mutate(sum_values = rowSums(.[1:3]))
Есть еще идиоматичные и лучшие идеи с R and dplyr
?