R:colSums&变异(错误的结果大小)

时间:2017-04-07 16:23:59

标签: r dplyr

我试图在数据框的底部改变colSums,但表的第一列是包含标签的字符向量。

例如,

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))

没有标签col,

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

应该可以正常工作......但我试过

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

给了我一条错误信息

  

mutate_impl(.data,dots)出错:错误的结果大小(5),预期   10或1

如何忽略第一列并仍然将colSums变为数据框的底部?

谢谢。

1 个答案:

答案 0 :(得分:2)

mutate向data.frame添加新列。您表明您正在尝试向底部添加新行。因此错误消息:在尝试创建新列时,mutate需要一个长度为10的向量(或者可以填充整个列的单个值)。

如果要将总计行添加到data.frame,请尝试janitor::adorn_totals("row")

library(janitor)

df %>%
  adorn_totals("row")

 label x1 x2 x3 x4 x5
     A  1  1  0  1  1
     B  0  1  1  0  1
     C  0 NA  0 NA NA
     D NA  1  1  1  1
     E  0  1  1  0  1
     F  1  0  0  0  1
     G  1 NA NA NA NA
     H NA NA NA  0  1
     I  0  0  0  0  0
     J  1  1  1  1  1
 Total  4  5  4  3  7

自我推销免责声明,我写了janitor包和这个函数 - 发布这个答案,因为该函数恰好解决了这种情况。