【发布时间】:2018-02-15 17:10:10
【问题描述】:
对于数据集 mtcars2
mtcars2 = mtcars
mtcars2 = mtcars2 %>% mutate(cyl9=cyl, disp9=disp, gear2=gear)
我想通过使用正则表达式捕获模式来获得一个新列,它是多列的总和。
这是一个解决方案,但是这是通过硬编码完成的
select(mtcars2, cyl9) + select(mtcars2, disp9) + select(mtcars2, gear2)
我尝试了类似的方法,但它给了我一个数字而不是一个向量
mtcars2 %>% select(matches("[0-9]")) %>% sum
请仅使用 dplyr 解决方案,因为稍后我需要将这些函数应用于 sql 表。
谢谢!
更新.. 我需要处理 sql 表的解决方案,数据设置如下..
mydb <- dbConnect(RSQLite::SQLite(), "")
dbWriteTable(mydb, "mt", mtcars)
mt.sql=tbl(mydb, "mt")
mt.sql = mt.sql %>% mutate(cyl9=cyl, disp9=disp, gear2=gear)
reduce()、rowSums()、rowwise() 在 sql 表上不起作用,我试过了,但它们给了我错误。
我试过了,
mt.sql %>% rowwise()
错误:is.data.frame(data) 不是 TRUE
mt.sql %>% select(matches("[0-9]")) %>% mutate(sum=rowSums(.))
UseMethod("escape") 中的错误: 没有适用于“escape”的方法应用于“c('tbl_dbi', 'tbl_sql', 'tbl_lazy', 'tbl')”类的对象
mt.sql %>% select(matches("[0-9]")) %>% reduce(`+`)
.x + .y 中的错误:二进制运算符的非数字参数
如果我将 mt.sql 切换到 mtcars2,它们都可以工作,所以我猜这是一个 sql 表问题。
【问题讨论】:
-
你需要
rowSums而不是sum:mtcars2 %>% select(matches("[0-9]")) %>% rowSums() -
@mt1022 添加为答案?
-
感谢您的解决方案,但 rowSums 不适用于 sql 表。
-
更新了..谢谢大家..
-
@RonakShah 这些解决方案仅适用于 dfs.. 我更新了我的帖子.. 谢谢