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
相关产品推荐
相关产品推荐

