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

R语言设置data.table行名报错:invalid 'row.names' length 求助

问题:data.table重命名行名并保留gain列时触发"invalid 'row.names' length"错误

我有一个data.table,尝试重命名行名并仅保留gain列时,出现如下错误:

Error in `.rowNamesDF<-`(x, value = value): invalid 'row.names' length
Traceback:

1. `rownames<-`(`*tmp*`, value = structure(list(Feature = c("CHEST_SCAN_RESULT_VALUE", 
 . "CRP", "PROCALCITONIN", "NEUT_ABSOLUTE", "SPO2_FIO2_RATIO", "CLINICAL_NOTES_PHYSICAL_EXAMINATION", 
 . "CLINICAL_NOTES_COUGH", "HAEMATOCRIT", "TEMPERATURE", "CLINICAL_NOTES_FLUID_OVERLOAD", 
 . "PULSE", "RESPIRATION", "WBC", "BP_SYSTOLIC", "CHRONIC_OBSTRUCTIVE_LUNG_DIS", 
 . "MONOCYTE", "CLINICAL_NOTES_GENERAL_CONDITION_MENTAL_STATE_CHANGE", 
 . "HOSPITALIZED_90_DAYS_PRIOR", "CKD", "BRONCHIEC_ILD_CF", "ASTHMA", 
 . "CLINICAL_NOTES_BREATHLESSNESS")), row.names = c(NA, -22L), class = c("data.table", 
 . "data.frame"), .internal.selfref = <pointer: 0x00000000044a1ef0>))
2. `row.names<-`(`*tmp*`, value = value)
3. `row.names<-.data.frame`(`*tmp*`, value = value)
4. `.rowNamesDF<-`(x, value = value)
5. stop("invalid 'row.names' length")

错误原因

从错误回溯可以看出,你给rownames<-传递的value是一个data.table对象,而不是符合要求的字符向量。行名要求的是长度与数据行数完全匹配的字符向量,传入数据框/表会导致长度不匹配,触发错误。

解决办法

方法1:分步操作(符合你的需求)

  1. 先提取行名所需的字符向量(假设原data.table名为dt,行名来自Feature列):
    row_names <- dt$Feature
    
  2. 保留gain列:
    dt_gain <- dt[, .(gain)]
    
  3. 为新表设置行名:
    rownames(dt_gain) <- row_names
    

方法2:一步简化

dt_gain <- dt[, .(gain)]
rownames(dt_gain) <- dt$Feature

额外建议:遵循data.table设计习惯

data.table的设计理念不推荐使用行名,更建议将原本用作行名的Feature列保留在表中,这样后续的data.table操作(如索引、分组)会更方便:

# 保留Feature列和gain列
dt_gain <- dt[, .(Feature, gain)]
# 可选:设置Feature为键,方便快速索引
setkey(dt_gain, Feature)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 22:40:35