2017-04-07 31 views
1

我試圖改變數據框底部的colSums,但表中的第一列是包含標籤的字符向量。R:colSums&Mutate(錯誤的結果大小)

例如,

df=data.frame(
    label = c("A","B","C","D","E","F","G","H","I","J"), 
    x1=c(1,0,0,NA,0,1,1,NA,0,1), 
    x2=c(1,1,NA,1,1,0,NA,NA,0,1), 
    x3=c(0,1,0,1,1,0,NA,NA,0,1), 
    x4=c(1,0,NA,1,0,0,NA,0,0,1), 
    x5=c(1,1,NA,1,1,1,NA,1,0,1)) 

沒有標籤山坳,

df %>% mutate(Total = colSums(df[, 1:5], na.rm = TRUE)) 

應該正常工作......但我想

df %>% mutate(Total = colSums(df[, 2:6], na.rm = TRUE)) 

這給了我一個錯誤信息

錯誤mutate_impl(。數據,點):結果大小(5)錯誤,預期 10或1

我怎麼能忽略第一列,仍然變異colSums到我的數據幀的底部?

謝謝。

+0

你正在嘗試上面做的是與列總計添加另一列。這與行數不匹配(您正在求和的列數不等於行數)。所以這是不合適的。您可以計算'colSums',然後使用'bind_rows'將其添加爲另一行。 – student

回答

1

mutate向data.frame添加新列。您表示您正在嘗試向底部添加新行。因此,錯誤消息:在試圖創建一個新列時,mutate需要一個長度爲10的向量(或可填充整個列的單個值)。

如果你想一個彙總行添加到data.frame,嘗試janitor::add_totals_row

library(janitor) 

df %>% 
    add_totals_row() 

#> label x1 x2 x3 x4 x5 
#> 1  A 1 1 0 1 1 
#> 2  B 0 1 1 0 1 
#> 3  C 0 NA 0 NA NA 
#> 4  D NA 1 1 1 1 
#> 5  E 0 1 1 0 1 
#> 6  F 1 0 0 0 1 
#> 7  G 1 NA NA NA NA 
#> 8  H NA NA NA 0 1 
#> 9  I 0 0 0 0 0 
#> 10  J 1 1 1 1 1 
#> 11 Total 4 5 4 3 7 
+0

非常感謝你! – wjang4