【问题标题】:Join dataframes, retaining column names加入数据框,保留列名
【发布时间】:2022-01-04 21:26:21
【问题描述】:

我有以下 3 个数据框,每个数据框都有带有名称的列。我想组合它们并保留列名。当我使用我找到的用于组合数据帧的补丁时,它会将该名称放在任何没有至少 2 列的数据帧上。如何保留名称?

x<-data.frame(mean(1:10))
names(x)[names(x) == 'mean.1.10.'] <- 'var.name'
y<-data.frame(1:4)
names(y)[names(y) == 'X1.4'] <- 'var.name2'
z<-data.frame(matrix(1:10,5,2))
names(z)[names(z) == 'X1'] <- 'var.name3'
names(z)[names(z) == 'X2'] <- 'var.name4'

list_datf <- list(x, y, z)
n_r <- seq_len(max(sapply(list_datf, nrow)))
NEW <- do.call(cbind, lapply(list_datf, `[`, n_r, ))

【问题讨论】:

    标签: r dataframe merge


    【解决方案1】:

    您需要在索引步骤中包含drop = FALSE,以便您绑定在一起的内容保留其所有维度。我无法通过将drop = FALSE 作为额外参数传递给[ 来解决此问题,因此我转而使用匿名函数。

    NEW <- do.call(cbind, lapply(list_datf, function(x) x[n_r, , drop = FALSE]))
    

    或者,您可以将组件转换为 tibble,它(与数据框不同)永远不会丢弃“不需要的”尺寸:

    NEW <- do.call(cbind, lapply(list_datf, function(x) tibble::as_tibble(x)[n_r, ]))
    

    如果你想去完整的tidyverse:

    library(dplyr)
    list_datf %>% purrr::map(~ tibble::as_tibble(.)[n_r, ]) %>% bind_cols()
    

    【讨论】:

    • 谢谢!我收到一个错误>>>错误:“NEW 中的意外输入
    • 什么版本的 R? \(x) 相当新。我将切换回旧语法。
    • 工作中,谢谢!为什么它只是删除 1 列数据框的名称?
    • R 就是这样做的。查看?"[" 并搜索drop
    猜你喜欢
    • 2022-01-10
    • 1970-01-01
    • 2013-12-23
    • 2020-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-16
    • 2019-09-28
    相关资源
    最近更新 更多