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

R新手接手项目后添加列致cbind行数不匹配错误求助

行数不匹配原因分析与修复

核心原因

错误提示的两行数250096和250684来自两个数据框的行数差异:

  • Ans_Data_2的行数:新代码中Ans_Data读取了1276行个体数据(A12:GO1287的行数为1287-12+1=1276),通过pivot_longer将196个问题列转成长格式,总行数为1276 × 196 = 250096。
  • Question_Data_2的行数:循环for (i in 1:1278)的逻辑是生成1279份Question_Data(i=1时合并2份,后续1277次每次加1份,总份数=2+1277=1279)。新的Question_Data对应196个问题,所以总行数为1279 × 196 = 250684。

两者的行数差为(1279-1276)×196=588,根源是循环次数(生成1279份)与实际个体数(1276)不匹配——旧代码中Ans_Data的行数是1279,循环次数刚好对应,而新代码更新了数据范围但未调整循环逻辑。

额外潜在问题

你的Question_Data处理逻辑可能存在偏差:
当前代码用col_names=T读取问题元数据,会把Excel第一行当作列名,转置后再将第一行设为列名并删除,可能导致Question_Data的行数与实际问题数(196)不一致。正确的处理应该是先读取无列名的元数据,再设置列名后转置:

Question_Data = read_xlsx("DSM Data 15.2.23 DP v5.xlsx", 
  sheet = "CHANGED Tab 2 - AR weighted",
  range = "A1:GO10", col_names = F)
# 将第一行作为问题ID列名
colnames(Question_Data) = Question_Data[1,]
# 保留属性行
Question_Data = Question_Data[-1,]
# 转置为每行对应一个问题
Question_Data = t(Question_Data)
Question_Data = data.table(Question_Data)

修复方案

替换低效且易出错的for循环,用replicate生成与个体数匹配的Question_Data_2:

# 生成与Ans_Data行数一致的重复问题元数据
Question_Data_2 = do.call(rbind, replicate(nrow(Ans_Data), Question_Data, simplify = FALSE))

# 再合并数据
Ans_Data_3 = cbind(Ans_Data_2, Question_Data_2)

该方法会自动根据Ans_Data的行数(1276)重复Question_Data,确保两者行数完全匹配,同时比循环更高效。

内容的提问来源于stack exchange,提问作者user22375878

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 00:29:50