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

R语言如何正确编辑dataframe中存储为列表的指定单元格内容

R修改包含列表类型列的data.frame指定行的方法

问题场景

构造如下包含列表类型列的data.frame:

new_df <- structure(list(ID = list(ID = "21", ID = "4"), 
               MET = structure(list(c("A", "B"), c("C", "D")), .Names = c(""," ")), 
               REGN = structure(list(c("ALL", "US"), "ALL"), .Names = c("", "")), 
               YEAR = list(YEAR = "2020", YEAR = "2020"), 
               WEEK = list(WEEK = c("12", "13", "14"), WEEK = "16"), 
               ANN = list(ANN = "Seller",ANN = "Rise")), row.names = 1:2, class = "data.frame")

打印效果如下:

ID  MET    REGN YEAR       WEEK    ANN
1 21 A, B ALL, US 2020 12, 13, 14 Seller
2  4 C, D     ALL 2020         16   Rise

尝试修改第1行REGN列的值时执行了以下代码:

new_df[1,"REGN"] <- list(c(New "ALL", "New US"))

得到报错:

Warning message:
In `[<-.data.frame`(`*tmp*`, 1, "REGN", value = list(c("ALL", "USNew" :
  replacement element 1 has 2 rows to replace 1 rows

预期输出为:

ID  MET            REGN    YEAR       WEEK    ANN
1 21 A, B New ALL, New US    2020 12, 13, 14 Seller
2  4 C, D              ALL   2020         16   Rise

错误原因

  • 语法错误:New属于字符串内容,需要放在引号内部,正确写法为"New ALL",而非New "ALL"
  • 列表列赋值规则问题:修改列表列的单个单元格时,传入的赋值内容必须是长度为1的列表,列表的第一个元素才是要存入该单元格的向量。原先写法list(c("New ALL", "New US"))会被R识别为要给两行分别赋值"New ALL"和"New US",不符合只修改1行的需求。

正确实现代码

new_df[1, "REGN"] <- list(list(c("New ALL", "New US")))

也可以用[[索引直接操作列表列的元素:

new_df[["REGN"]][1] <- list(c("New ALL", "New US"))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 11:27:05