为了账号安全,请及时绑定邮箱和手机立即绑定

dplyr mutate rowSums计算或自定义函数

dplyr mutate rowSums计算或自定义函数

慕运维8079593 2019-11-29 10:19:40
我正在尝试从行计算中突变一个新变量,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


查看完整回答
反对 回复 2019-11-29
?
当年话下

TA贡献1890条经验 获得超9个赞

我正在使用这个简单的解决方案,它是对Davide Passaretti的回答的更强大的修改:


iris %>% select(Sepal.Length:Petal.Width) %>%

  transmute(sumVar = rowSums(.)) %>% bind_cols(iris, .)

(但是,这需要定义的行顺序,这应该很好,除非您可能使用远程数据集。)


查看完整回答
反对 回复 2019-11-29
?
蓝山帝景

TA贡献1843条经验 获得超7个赞

您也可以使用grep代替containsor matches,以防万一您需要熟悉正则表达式(matches根据我的经验,这似乎不太像否定的前瞻之类)。


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


查看完整回答
反对 回复 2019-11-29
  • 3 回答
  • 0 关注
  • 1199 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信