gpt4 book ai didi

r - dplyr:带有 rbind_all 与 bind_rows 的数据框的向量列表

转载 作者:行者123 更新时间:2023-12-04 12:16:41 25 4
gpt4 key购买 nike

我想将命名列表列表转换为数据框,其中一些缺少列。我可以使用已弃用的 rbind_all 成功地做到这一点但不是替换 bind_rows
示例
缺少列的列表( el3 缺少 b)

ex = list(el1=c(a=1, b=2, c=3), el2=c(a=2, b=3, c=4), el3=c(a=3, c=5))

rbind_all(ex)
# A tibble: 3 x 3
a b c
<dbl> <dbl> <dbl>
1 1 2 3
2 2 3 4
3 3 NA 5


> bind_rows(ex)
Error in bind_rows_(x, .id) : Argument 3 must be length 3, not 2

没有缺失的列

ex2 = list(el1=c(a=1, b=2, c=3), el2=c(a=2, b=3, c=4), el3=c(a=3, b=4, c=5))

rbind_all(ex2)
# A tibble: 3 x 3
a b c
<dbl> <dbl> <dbl>
1 1 2 3
2 2 3 4
3 3 4 5

bind_rows(ex2) # Output is transposed for some reason
# A tibble: 3 x 3
el1 el2 el3
<dbl> <dbl> <dbl>
1 1 2 3
2 2 3 4
3 3 4 5

如何复制 rbind_all具有未弃用功能的行为?

最佳答案

请阅读 ?bind_rows 中的此示例:

# Note that for historical reasons, lists containg vectors are
# always treated as data frames. Thus their vectors are treated as
# columns rather than rows, and their inner names are ignored:
ll <- list(
a = c(A = 1, B = 2),
b = c(A = 3, B = 4)
)
bind_rows(ll)

# You can circumvent that behaviour with explicit splicing:
bind_rows(!!!ll)

因此,在您的情况下,您可以尝试:
ex = list(el1=c(a=1, b=2, c=3), el2=c(a=2, b=3, c=4), el3=c(a=3, c=5))
bind_rows(!!!ex)

# # A tibble: 3 x 3
# a b c
# <dbl> <dbl> <dbl>
# 1 1 2 3
# 2 2 3 4
# 3 3 NA 5

ex2 = list(el1=c(a=1, b=2, c=3), el2=c(a=2, b=3, c=4), el3=c(a=3, b=4, c=5))
bind_rows(!!!ex2)

# # A tibble: 3 x 3
# a b c
# <dbl> <dbl> <dbl>
# 1 1 2 3
# 2 2 3 4
# 3 3 4 5

关于r - dplyr:带有 rbind_all 与 bind_rows 的数据框的向量列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55034897/

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