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:分步操作(符合你的需求)
- 先提取行名所需的字符向量(假设原data.table名为
dt,行名来自Feature列):row_names <- dt$Feature - 保留
gain列:dt_gain <- dt[, .(gain)] - 为新表设置行名:
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
相关产品推荐
相关产品推荐

