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

R语言as.factor转换报错:$<-.data.frame替换行数不匹配问题

报错排查:Error in $<-.data.frame(*tmp*, CofMind_1, value = integer(0)) : replacement has 0 rows, data has 112

问题场景

我是R语言新手,用as.factor()转换变量类型时,多数变量正常,但弹出上述报错。

我的代码

数据整理代码

CMD.LongF <- dplyr::select(mainF, ResponseId, Age, Gender, Education, Polview, CofMind_1, CofMind_2, Align_1, Align_2, NA_1, NA_2) %>%
  gather(CofMind_1, CofMind_2, Align_1, Align_2, key = "Item", value = "Score", na.rm = TRUE) %>% 
  separate(col = Item, into = c("Variable",'Item'), sep = "_") %>%
  arrange(ResponseId)
cmdcF=CMD.LongF #longformat

因子转换代码

cmdcF$ResponseId=as.factor(cmdcF$ResponseId)
cmdcF$Gender=as.factor(cmdcF$Gender)
cmdcF$Education=as.factor(cmdcF$Education)
cmdcF$Age=as.factor(cmdcF$Age)
cmdcF$Polview=as.factor(cmdcF$Polview)
cmdcF$CofMind=as.factor(cmdcF$CofMind)
cmdcF$Align=as.factor(cmdcF$Align)
cmdcF$Item=as.factor(cmdcF$Item)

#re_name

研究核心变量

  • ResponseId(每位参与者的唯一标识)
  • CofMind(参与者对每组题项的态度转变情况)
  • Align(参与者与专家的利益一致性)
  • Item(题项1和题项2)

当前数据结构

str(cmdcF)
'data.frame': 112 obs. of 10 variables:

  • $ ResponseId: Factor w/ 28 levels "R_1CBeSOZYxg9lrFk",..: 1 1 1 1 2 2 2 2 3 3 ...
  • $ Age : Factor w/ 15 levels "","16","21","22",..: 1 1 1 1 1 1 1 1 12 12 ...
  • $ Gender : Factor w/ 3 levels "Female","Male",..: 1 1 1 1 2 2 2 2 2 2 ...
  • $ Education : Factor w/ 6 levels "Bachelor's degree",..: 5 5 5 5 4 4 4 4 2 2 ...
  • $ Polview : Factor w/ 4 levels "Neutral","Slightly conservative",..: 4 4 4 4 2 2 2 2 4 4 ...
  • $ NA_1 : int 1 1 1 1 1 1 1 1 0 0 ...
  • $ NA_2 : int 0 0 0 0 0 0 0 0 1 1 ...
  • $ Variable : chr "CofMind" "CofMind" "Align" "Align" ...
  • $ Item : chr "1" "2" "1" "2" ...
  • $ Score : num 0 0 13.6 13.9 0 ...

报错原因及修复方案

  1. 核心问题:你尝试转换的cmdcF$CofMind和cmdcF$Align根本不存在于当前数据框。经过gather+separate处理后,原有的CofMind_1/CofMind_2、Align_1/Align_2已被整合到Variable列(取值为"CofMind"或"Align"),Item列存储题项编号。

  2. 修复代码:

    • 删除错误的cmdcF$CofMind=as.factor(cmdcF$CofMind)和cmdcF$Align=as.factor(cmdcF$Align)两行。
    • 把Variable列转换为因子:
      cmdcF$Variable = as.factor(cmdcF$Variable)
      
    • 保留原有的Item列转因子代码即可。
  3. 额外提示:讲师代码能运行,大概率是其数据处理逻辑或原始数据结构与你不同,可对比讲师的str(cmdcF)输出确认变量差异。


内容的提问来源于stack exchange,提问作者Vipul Vivek Mallik-Das

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 22:23:23