R语言data.frame赋值报错:替换值行数与数据行数不匹配
问题分析与解决方法
报错原因
你遇到的$<-.data.frame报错,核心是行数不匹配:
- 原数据框
cases_df有554行,而count(monthly)会生成一个仅包含56行的汇总结果(每个月份一行,统计该月的记录数),直接把这个56行的结果赋值给原数据框的cases列(需要554个值),自然触发长度不匹配的错误。
修正方案
下面两种方法都能实现「给原数据框每行添加对应月份统计数」的需求:
方法1:用group_by + mutate直接生成列
借助dplyr的分组操作,在原数据框内直接计算每个月份的记录数,每行都会对应所在月份的统计值:
library(dplyr) library(zoo) # 加载as.yearmon所需的包 cases_df <- cases_df %>% mutate(monthly = as.yearmon(positive_date)) %>% # 生成月份列 group_by(monthly) %>% # 按月份分组 mutate(cases = n()) %>% # 给每组(每个月)添加记录数 ungroup() # 取消分组,恢复普通数据框
方法2:先汇总再合并
先单独生成月份统计的汇总表,再通过关联合并到原数据框:
library(dplyr) library(zoo) # 第一步:生成月份-计数的汇总表 monthly_summary <- cases_df %>% mutate(monthly = as.yearmon(positive_date)) %>% count(monthly, name = "cases") # 指定统计列名为cases # 第二步:将汇总结果合并到原数据框 cases_df <- cases_df %>% mutate(monthly = as.yearmon(positive_date)) %>% left_join(monthly_summary, by = "monthly")
原代码问题点
原代码中cases_df %>% count(monthly)返回的是一个全新的、只有56行的数据框(包含monthly和n两列),而cases_df$cases是原数据框中长度为554的向量,两者长度不匹配,无法直接赋值。
内容的提问来源于stack exchange,提问作者Kei Kei
相关产品推荐
相关产品推荐

