Подтвердить что ты не робот

Dplyr мутировать вычисления rowSums или пользовательские функции

Я пытаюсь изменить новую переменную из сортировки строк, скажем rowSums, как показано ниже

iris %>% 
  mutate_(sumVar = 
            iris %>% 
            select(Sepal.Length:Petal.Width) %>%
            rowSums)

результат состоит в том, что "sumVar" усекается до его первого значения (10.2):

Source: local data frame [150 x 6]
Groups: <by row>

   Sepal.Length Sepal.Width Petal.Length Petal.Width Species sumVar
1           5.1         3.5          1.4         0.2  setosa   10.2
2           4.9         3.0          1.4         0.2  setosa   10.2
3           4.7         3.2          1.3         0.2  setosa   10.2
4           4.6         3.1          1.5         0.2  setosa   10.2
5           5.0         3.6          1.4         0.2  setosa   10.2
6           5.4         3.9          1.7         0.4  setosa   10.2
..
Warning message:
Truncating vector to length 1 

Должно ли это быть rowwise? Или то, что правильный глагол использовать в этих вычислениях.

Edit:

В частности, есть ли способ реализовать встроенную пользовательскую функцию с помощью dplyr?

Мне интересно, можно ли сделать что-то вроде:

iris %>% 
  mutate(sumVar = colsum_function(Sepal.Length:Petal.Width))
4b9b3361

Ответ 1

Это скорее обходной путь, но его можно использовать

iris %>% mutate(sumVar = rowSums(.[1:4]))

Как написано в комментариях, вы также можете использовать select внутри мутанта, чтобы получить столбцы, которые вы хотите подытожить, например

iris %>% 
  mutate(sumVar = rowSums(select(., contains("Sepal")))) %>% 
  head 

или

iris %>% 
  mutate(sumVar = select(., contains("Sepal")) %>% rowSums()) %>% 
  head

Ответ 2

Более сложный способ:

 iris %>% select(Sepal.Length:Petal.Width) %>%
mutate(sumVar = rowSums(.)) %>% left_join(iris)

Ответ 3

Добавление комментария @docendodiscimus в качестве ответа. +1 к нему!

iris %>% mutate(sumVar = rowSums(select(., contains("Sepal"))))