Как использовать base::rowSums() с каналом dplyr/magrittr (%›%)

Я пытаюсь ответить, сколько полей в каждой строке меньше 5, используя pipe. В следующем виде это работает (без пайпа):

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

person Rasmus Larsen    schedule 23.12.2014    source источник
comment
попробуй iris[1:5,1:4] %>% {rowSums( . <5 )}   -  person Khashaa    schedule 23.12.2014
comment
@Khashaa, ты прав :) iris[1:5,1:4] %›% mutate( newvar = {rowSums( . ‹5 )} ) спасибо!   -  person Rasmus Larsen    schedule 24.12.2014


Ответы (1)


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 
person David Arenburg    schedule 23.12.2014
comment
полноценный магриттр iris %>% extract(1:5, 1:4) %>% is_less_than(5)%>% rowMeans - person Khashaa; 23.12.2014
comment
Причина для DV будет оценена. - person David Arenburg; 21.10.2015