我正在尝试从行计算中突变一个新变量,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 sumVar1 5.1 3.5 1.4 0.2 setosa 10.22 4.9 3.0 1.4 0.2 setosa 10.23 4.7 3.2 1.3 0.2 setosa 10.24 4.6 3.1 1.5 0.2 setosa 10.25 5.0 3.6 1.4 0.2 setosa 10.26 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))
3 回答
不负相思意
TA贡献1777条经验 获得超10个赞
这更多是一种解决方法,但可以使用
iris %>% mutate(sumVar = rowSums(.[1:4]))
如注释中所写,您还可以使用selectmutate内部来获取要汇总的列,例如
iris %>%
mutate(sumVar = rowSums(select(., contains("Sepal")))) %>%
head
要么
iris %>%
mutate(sumVar = select(., contains("Sepal")) %>% rowSums()) %>%
head
当年话下
TA贡献1890条经验 获得超9个赞
我正在使用这个简单的解决方案,它是对Davide Passaretti的回答的更强大的修改:
iris %>% select(Sepal.Length:Petal.Width) %>%
transmute(sumVar = rowSums(.)) %>% bind_cols(iris, .)
(但是,这需要定义的行顺序,这应该很好,除非您可能使用远程数据集。)
蓝山帝景
TA贡献1843条经验 获得超7个赞
您也可以使用grep代替containsor matches,以防万一您需要熟悉正则表达式(matches根据我的经验,这似乎不太像否定的前瞻之类)。
iris %>% mutate(sumVar = rowSums(select(., grep("Sepal", names(.)))))
- 3 回答
- 0 关注
- 1199 浏览
添加回答
举报
0/150
提交
取消