如何在R语言中向含列表列的数据框添加行?报错求助
带列表列的数据框添加行的正确方法
错误原因
你用c("Amos", I(list(c(3,4,5))))添加行时,c()函数会把列表结构扁平化,让第二个元素变成长度为3的向量,而原数据框的children列是列表类型(每个单元格存一个向量),这就导致赋值时出现"替换元素有3行要替换1行"的警告。
正确添加方法
方法1:用rbind构造单行数据框合并
直接构造一个和原数据框结构一致的单行数据框,再用rbind合并:
dt <- rbind(dt, data.frame(name = "Amos", children = I(list(c(3,4,5)))))
方法2:用list()包裹赋值内容
避免用c()扁平化列表,改用list()保持每个列的类型:
dt[nrow(dt) + 1, ] <- list(name = "Amos", children = I(list(c(3,4,5))))
方法3:用dplyr的add_row(tidyverse风格)
如果习惯用tidyverse工具包,add_row能自动识别列表列,写法更简洁:
library(dplyr) dt <- dt %>% add_row(name = "Amos", children = list(c(3,4,5)))
验证结果
执行任意一种方法后,数据框输出如下:
name children 1 John 1, 2, 3 2 Amos 3, 4, 5
内容的提问来源于stack exchange,提问作者kelvin
相关产品推荐
相关产品推荐

