gpt4 book ai didi

r - 在 lapply/ldply 的列表中使用对象名称

转载 作者:行者123 更新时间:2023-12-04 10:04:39 27 4
gpt4 key购买 nike

试图回答 a question早些时候,我遇到了一个看起来应该很简单的问题,但我想不通。

如果我有一个数据框列表:

df1 <- data.frame(a=1:3, x=rnorm(3))
df2 <- data.frame(a=1:3, x=rnorm(3))
df3 <- data.frame(a=1:3, x=rnorm(3))

df.list <- list(df1, df2, df3)

我要 rbind一起,我可以做到以下几点:
df.all <- ldply(df.list, rbind)

但是,我想要另一列标识哪个 data.frame每一行来自。我希望能够使用 deparse(substitute(x))方法( here 和其他地方)获取相关 data.frame 的名称并添加一列。这就是我接近它的方式:
fun <- function(x) {
name <- deparse(substitute(x))
x$id <- name
return(x)
}
df.all <- ldply(df.list, fun)

哪个返回
  a          x      id
1 1 1.1138062 X[[1L]]
2 2 -0.5742069 X[[1L]]
3 3 0.7546323 X[[1L]]
4 1 1.8358605 X[[2L]]
5 2 0.9107199 X[[2L]]
6 3 0.8313439 X[[2L]]
7 1 0.5827148 X[[3L]]
8 2 -0.9896495 X[[3L]]
9 3 -0.9451503 X[[3L]]

很明显,列表中的每个元素都不包含我认为的名称。任何人都可以建议一种方法来获得我所期望的(如下所示)?
  a          x  id
1 1 1.1138062 df1
2 2 -0.5742069 df1
3 3 0.7546323 df1
4 1 1.8358605 df2
5 2 0.9107199 df2
6 3 0.8313439 df2
7 1 0.5827148 df3
8 2 -0.9896495 df3
9 3 -0.9451503 df3

最佳答案

用名字定义你的列表,它应该给你一个 .id列与 data.frame姓名

df.list <- list(df1=df1, df2=df2, df3=df3)
df.all <- ldply(df.list, rbind)

输出:
  .id a           x
1 df1 1 1.84658809
2 df1 2 -0.01177462
3 df1 3 0.58579469
4 df2 1 -0.64748756
5 df2 2 0.24384614
6 df2 3 0.59012676
7 df3 1 -0.63037679
8 df3 2 -1.17416295
9 df3 3 1.09349618

那么你就可以知道 data.frame列中的名称 df.all$.id
编辑:
根据@Gary Weissman 的评论,如果您想自动生成名称,您可以这样做
names(df.list) <- paste0('df',seq_along(df.list)

关于r - 在 lapply/ldply 的列表中使用对象名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15214472/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com