【发布时间】:2021-03-11 20:20:37
【问题描述】:
开始:我见过this post,不,tidyr 的unnest 在这里不起作用。我正在做一个lapply,其中返回函数返回一个包含命名条目的列表(为清楚起见,请参阅底部的示例func):
ls <- lapply(x, func)
现在,如果我查看 ls,它是一个列表列表,在 R Studio 数据查看器中,它显示为具有 Name、Type 和 Value 列。
现在,如果我使用
df <- bind_rows(ls)
我得到正是我想要的,除了我需要将包含x 的数据框绑定到df。这就是问题所在,因为对于每个 x,func 将返回可变数量的行,这意味着在我已经将 ls 附加到我的数据帧之后,我需要运行等效的 bind_rows。
一个例子如下:
func <- function(x){
res <- list()
res$name <- 1:x
res$val <- 1:x
return(res)
}
df <- data.frame(nums <- c(1:3), letters <- c("A", "B", "C"))
ls <- lapply(df$nums, func)
bind_rows(ls) 给出:
name val
<int> <int>
1 1 1
2 1 1
3 2 2
4 1 1
5 2 2
6 3 3
所需的输出是:
name val nums letters
<int> <int> <dbl> <chr>
1 1 1 1 A
2 1 1 2 B
3 2 2 2 B
4 1 1 3 C
5 2 2 3 C
6 3 3 3 C
注意func 在这里创建n 给定x = n 的行。我的 actual 函数不是这种情况。 func(n) 可以产生任意正数的行。
【问题讨论】: