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 ...
报错原因及修复方案
核心问题:你尝试转换的
cmdcF$CofMind和cmdcF$Align根本不存在于当前数据框。经过gather+separate处理后,原有的CofMind_1/CofMind_2、Align_1/Align_2已被整合到Variable列(取值为"CofMind"或"Align"),Item列存储题项编号。修复代码:
- 删除错误的
cmdcF$CofMind=as.factor(cmdcF$CofMind)和cmdcF$Align=as.factor(cmdcF$Align)两行。 - 把
Variable列转换为因子:cmdcF$Variable = as.factor(cmdcF$Variable) - 保留原有的
Item列转因子代码即可。
- 删除错误的
额外提示:讲师代码能运行,大概率是其数据处理逻辑或原始数据结构与你不同,可对比讲师的
str(cmdcF)输出确认变量差异。
内容的提问来源于stack exchange,提问作者Vipul Vivek Mallik-Das
相关产品推荐
相关产品推荐

