我试图在数据框的底部改变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变为数据框的底部?
谢谢。
答案 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包和这个函数 - 发布这个答案,因为该函数恰好解决了这种情况。