You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 09:45:41