r - 如何将数据框变量名移动到第一行并将新变量名添加到列表中的多个数据框?

标签 r purrr tibble

library(purrr)
library(tibble)
library(dplyr)

数据框的起始列表

lst <- list(df1 = data.frame(X.1 = as.character(1:2),
                             heading = letters[1:2]),
            df2 =  data.frame(X.32 = as.character(3:4),
                              another.topic = paste("Line ", 1:2)))

lst
#> $df1
#>   X.1 heading
#> 1   1       a
#> 2   2       b
#> 
#> $df2
#>   X.32 another.topic
#> 1    3       Line  1
#> 2    4       Line  2

预期的“组合”数据框,每个组成数据框的第一行具有一致的新变量名和旧变量名。

#>    id   h1            h2
#> 1 df1  X.1       heading
#> 2 df1    1             a
#> 3 df1    2             b
#> 4 df2 X.32 another.topic
#> 5 df2    3       Line  1
#> 6 df2    4       Line  2

add_row 需要“名称-值对,传递给 tibble()。只能为 .data 中已存在的列定义值,未设置的列将获得 NA 值。”

这是我认为我已经取得的成就:

df_nms <- 
  map(lst, names) %>% 
  map(set_names)

#> $df1
#>       X.1   heading 
#>     "X.1" "heading" 
#> 
#> $df2
#>            X.32   another.topic 
#>          "X.32" "another.topic"

但我无法完成最后一点,使用 purrr 函数将名称添加到每个数据帧的头部。我已经尝试了 map2pmap 的多种变体,这是我目前能得到的最接近的(如果我将 add_row 视为公式,并在其前面加上前缀~ 并删除 .y 我得到一个新的第一行填充了 NAs)。我想我缺少如何将名称-值对传递给 add_row 函数。

map2(lst, df_nms, add_row(.x, .y, .before = 1)) %>% 
  map(set_names, c("h1", "h2")) %>% 
  map_dfr(bind_rows, .id = "id")
#> Error in add_row(.x, .y, .before = 1): object '.x' not found

非常感谢解决最后一步的指针。

最佳答案

不太确定如何通过 purrr map 函数来做到这一点,但这里有一个替代方案,

library(dplyr)
bind_rows(lapply(lst, function(i){d1 <- as.data.frame(matrix(names(i), ncol = ncol(i))); 
                                  rbind(d1, setNames(i, names(d1)))}), .id = 'id')

#   id   V1            V2
#1 df1  X.1       heading
#2 df1    1             a
#3 df1    2             b
#4 df2 X.32 another.topic
#5 df2    3       Line  1
#6 df2    4       Line  2

关于r - 如何将数据框变量名移动到第一行并将新变量名添加到列表中的多个数据框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62154062/

相关文章:

r - Shiny 的 promise future 不适用于 eventReactive

r - 在 R gganimate 中做动画时如何保留以前的数据层?

python - R 或 Python - 循环测试数据 - 接下来 24 小时的预测验证(每天 96 个值)

r - 如何在 Shiny 中使用 purrr 将一个 renderText 应用于多个输出?

r - Purrr 和映射向量输出函数

r - 使用每个预测变量列的拟合模型分别将结果存储在数据框中

r - tibble add_row 不整洁?

r - 有没有一种方法可以有效地连接两个表,其键以列表格式存储

r - 如何将 geom_box 中的填充 alpha 设置为因子中的观察数

r - 根据在一个衬管中删除 NA 的列的最大值获取名称