1

我正在尝试使用管道回答每行中有多少个字段小于 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”的这个解决方法解决了这个问题:

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(.)
4

1 回答 1

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 
于 2014-12-23T09:18:04.873 回答