对于数据集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中的错误(“转义”):没有适用于“转义”的方法应用于类“c('tbl_dbi','tbl_sql','tbl_lazy','tbl')的对象”
mt.sql %>% select(matches("[0-9]")) %>% reduce(`+`)
.x .y中的错误:二元运算符的非数字参数
如果我将mt.sql切换到mtcars2,它们都可以工作,所以我想这是一个sql表问题 .
2 回答
考虑到SQL约束阻止使用更简单和优雅的解决方案,如
rowSums
和reduce
,我提供了一个更黑客的答案,让我们回到更基本的new_col = a + b + c + ... + n
我们可以使用
tidyverse
选项