對於數據集mtcars2dplyr - 多個列的總和使用正則表達式
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)
減少(),rowSums(),橫行()不能在SQL表工作,香港專業教育學院試過這些,他們給我錯誤。
我試過,
mt.sql %>% rowwise()
錯誤:is.data.frame(數據)是不是真
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表問題。
你需要'rowSums',而不是'sum':'mtcars2%>%選擇(比賽( 「[0-9]」))%>%rowSums()' – mt1022
@ mt1022添加爲一個答案? –
感謝您的解決方案,但rowSums不工作在SQL表。 – user8542010