使用write.csv配合count函数导出CSV内容混乱是什么原因?
问题产生原因
dplyr::count()函数返回的结果是tibble(结构化数据框)类型,你使用count(df, treatment)[2]的语法是提取该tibble的第二列,返回的依旧是一个3行1列的tibble结构,而非你预期的原子向量/单个数值。- 当你在
mutate()中将这个单列tibble赋值给新列times时,tibble结构会被作为列表列塞入每一行的单元格中,因此每个单元格的存储内容都是完整的3行计数结果,导出CSV时就会显示为c(3,3,3)的文本格式。
修复方案
你可以将提取计数的语法替换为取原子向量的写法,就能得到预期的每行对应分组计数的结果:
# 写法1:用$提取指定列的向量 mutate(times = count(df, treatment)$n, thing = mean + sum) # 写法2:用双中括号提取列的向量 mutate(times = count(df, treatment)[[2]], thing = mean + sum) # 写法3:更高效的方式,直接在分组统计时计算行数,不需要额外调用count df_test1 <- df %>% group_by(treatment) %>% summarise(mean = mean(numb), sum = sum(numb), times = n()) %>% mutate(thing = mean + sum)
修复后导出的CSV文件中,times列会正常显示每个分组对应的数值3。
内容的提问来源于stack exchange,提问作者pabstack
相关产品推荐
相关产品推荐

