2017-04-07 30 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