根据名称向列表中的数据框添加值
Add values to data frames in list based on names
我确定以前一定有人问过这个问题,但我找不到答案。
我有一个数据框列表,如下所示:
x <- c(2, 3, 5)
y <- c("a", "b", "c")
df1 <- data.frame(x, y)
x <- c(3, 6, 9)
y <- c("a", "b", "c")
df2 <- data.frame(x, y)
ls <- list(df1, df2)
names(ls) <- c("example1", "example2")
我想做的是根据数据框的名称创建一个新列 text_id。我可以针对特定数据框执行此操作,如下所示:
ls[[1]]$text_id <- names(ls[1])
我以为我理解 lapply()
的工作原理,但我显然不理解,因为这不起作用:
ls2 <- lapply(ls, function(x){
ls[[x]]$text_id <- names(ls[x])
return(ls2)})
相反,我得到 Error in ls[x] : invalid subscript type 'list'
我在子集化之前尝试了 as.data.frame
,但这也没有用。而且我也不确定 return 的值是否应该是 ls2
,但我还没有做到这一点。
你可以试试Map
Map(cbind, ls, text_id=names(ls))
我确定以前一定有人问过这个问题,但我找不到答案。
我有一个数据框列表,如下所示:
x <- c(2, 3, 5)
y <- c("a", "b", "c")
df1 <- data.frame(x, y)
x <- c(3, 6, 9)
y <- c("a", "b", "c")
df2 <- data.frame(x, y)
ls <- list(df1, df2)
names(ls) <- c("example1", "example2")
我想做的是根据数据框的名称创建一个新列 text_id。我可以针对特定数据框执行此操作,如下所示:
ls[[1]]$text_id <- names(ls[1])
我以为我理解 lapply()
的工作原理,但我显然不理解,因为这不起作用:
ls2 <- lapply(ls, function(x){
ls[[x]]$text_id <- names(ls[x])
return(ls2)})
相反,我得到 Error in ls[x] : invalid subscript type 'list'
我在子集化之前尝试了 as.data.frame
,但这也没有用。而且我也不确定 return 的值是否应该是 ls2
,但我还没有做到这一点。
你可以试试Map
Map(cbind, ls, text_id=names(ls))