dplyr mutate 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应用吗?或在这类计算中使用的正确动词是什么。


编辑:


更具体地说,有什么方法可以用实现内联自定义功能dplyr吗?


我想知道是否有可能做类似的事情:


iris %>% 

  mutate(sumVar = colsum_function(Sepal.Length:Petal.Width))


慕运维8079593
浏览 1116回答 3
3回答

不负相思意

这更多是一种解决方法,但可以使用iris %>% mutate(sumVar = rowSums(.[1:4]))如注释中所写,您还可以使用selectmutate内部来获取要汇总的列,例如iris %>%&nbsp;&nbsp; mutate(sumVar = rowSums(select(., contains("Sepal")))) %>%&nbsp;&nbsp; head&nbsp;要么iris %>%&nbsp;&nbsp; mutate(sumVar = select(., contains("Sepal")) %>% rowSums()) %>%&nbsp;&nbsp; head

当年话下

我正在使用这个简单的解决方案,它是对Davide Passaretti的回答的更强大的修改:iris %>% select(Sepal.Length:Petal.Width) %>%&nbsp; transmute(sumVar = rowSums(.)) %>% bind_cols(iris, .)(但是,这需要定义的行顺序,这应该很好,除非您可能使用远程数据集。)

蓝山帝景

您也可以使用grep代替containsor matches,以防万一您需要熟悉正则表达式(matches根据我的经验,这似乎不太像否定的前瞻之类)。iris %>% mutate(sumVar = rowSums(select(., grep("Sepal", names(.)))))
打开App,查看更多内容
随时随地看视频慕课网APP