gpt4 book ai didi

r - Tidyverse 按行绑定(bind)未命名向量列表的方法 - do.call(rbind,x) 等效

转载 作者:行者123 更新时间:2023-12-03 07:29:42 25 4
gpt4 key购买 nike

我经常发现人们以某种​​方式最终得到未命名字符向量的未命名列表并且他们希望将它们逐行绑定(bind)到 data.frame 的问题。 .这是一个例子:

library(magrittr)
data <- cbind(LETTERS[1:3],1:3,4:6,7:9,c(12,15,18)) %>%
split(1:3) %>% unname
data
#[[1]]
#[1] "A" "1" "4" "7" "12"
#
#[[2]]
#[1] "B" "2" "5" "8" "15"
#
#[[3]]
#[1] "C" "3" "6" "9" "18"

一种典型的方法是使用 do.call从基础 R。
do.call(rbind, data) %>% as.data.frame
# V1 V2 V3 V4 V5
#1 A 1 4 7 12
#2 B 2 5 8 15
#3 C 3 6 9 18

使用 Reduce 可能是一种效率较低的方法。从基础 R。
Reduce(rbind,data, init = NULL) %>% as.data.frame
# V1 V2 V3 V4 V5
#1 A 1 4 7 12
#2 B 2 5 8 15
#3 C 3 6 9 18

但是,当我们考虑更现代的软件包时,例如 dplyrdata.table ,可能立即想到的一些方法不起作用,因为向量未命名或不是列表。
library(dplyr)
bind_rows(data)
#Error: Argument 1 must have names
library(data.table)
rbindlist(data)
#Error in rbindlist(data) :
# Item 1 of input is not a data.frame, data.table or list

一种方法可能是 set_names在向量上。
library(purrr)
map_df(data, ~set_names(.x, seq_along(.x)))
# A tibble: 3 x 5
# `1` `2` `3` `4` `5`
# <chr> <chr> <chr> <chr> <chr>
#1 A 1 4 7 12
#2 B 2 5 8 15
#3 C 3 6 9 18

但是,这似乎比需要的步骤更多。

因此,我的问题是什么是有效的 tidyversedata.table将未命名字符向量的未命名列表绑定(bind)到 data.frame 的方法逐行?

最佳答案

不完全确定效率,但使用 purrr 的紧凑选项和 tibble可能:

map_dfc(purrr::transpose(data), ~ unlist(tibble(.)))

V1 V2 V3 V4 V5
<chr> <chr> <chr> <chr> <chr>
1 A 1 4 7 12
2 B 2 5 8 15
3 C 3 6 9 18

关于r - Tidyverse 按行绑定(bind)未命名向量列表的方法 - do.call(rbind,x) 等效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61614900/

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