我正在尝试使用管道来回答每行中有多少字段小于5。在下面的表单中它可以工作(没有管道):
rowSums( iris[,1:4] < 5 ) # works!
但是,试图用管道问同样的问题是行不通的:
iris[1:5,1:4] %>% rowSums( . <5 ) # wrong: returns the total rowsum
iris[,1:4] %>% rowSums( < 5 ) # does not work either.
EDIT1 : 用户'docendo discimus'的This解决方法解决了这个问题:
iris %>% mutate(sumVar = rowSums(.[1:4]<5))
EDIT2 : 我更喜欢'docendo discimus的解决方法,因为它避免了嵌套的括号:
iris %>%
slice(1:5) %>%
select(1:4) %>%
dplyr::mutate( "New_var" = 10 ) %>% dplyr::mutate( "sumvar" = rowSums(. < 5 ) )
虽然以下解决方案(AFAICS)需要嵌套括号才能工作(而且我无法弄清楚如何在数据帧上突变新列)
(iris %>%
slice(1:5) %>%
select(1:4) %>%
dplyr::mutate( "New_var" = 10 ) < 5 ) %>% rowSums(.)
答案 0 :(得分:4)
iris[1:5, 1:4] %>% is_less_than(5) %>% rowSums
# 1 2 3 4 5
# 3 4 4 4 3
将magrittr
相当于(此处dplyr
不需要)
rowSums(iris[1:5, 1:4] < 5)
# 1 2 3 4 5
# 3 4 4 4 3