加入数据框,保留列名
Join dataframes, retaining column names
我有以下 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, ))
您需要在索引步骤中包含 drop = FALSE
,以便您绑定在一起的内容保留其所有维度。我无法通过将 drop = FALSE
作为额外参数传递给 [
来找到实现此目的的方法,因此我转而使用匿名函数。
NEW <- do.call(cbind, lapply(list_datf, function(x) x[n_r, , drop = FALSE]))
或者,您可以将您的组件转换为 tibbles,它(与数据框不同)永远不会删除“不需要的”维度:
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()
我有以下 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, ))
您需要在索引步骤中包含 drop = FALSE
,以便您绑定在一起的内容保留其所有维度。我无法通过将 drop = FALSE
作为额外参数传递给 [
来找到实现此目的的方法,因此我转而使用匿名函数。
NEW <- do.call(cbind, lapply(list_datf, function(x) x[n_r, , drop = FALSE]))
或者,您可以将您的组件转换为 tibbles,它(与数据框不同)永远不会删除“不需要的”维度:
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()