如何同时在多个数据框中更改列名?

时间:2019-06-25 14:04:13

标签: r

我有五个具有相同列数的数据框。我想使用rbind附加我的数据,但是它们具有不同的变量名。幸运的是,它具有这样的形式。

date prod1 code1 tot1

date prod2 code2 tot2

...

date prod5 code5 tot5

我想同时删除数字代码,这样我就可以重新绑定数据帧。我该怎么办?
预先感谢。

2 个答案:

答案 0 :(得分:1)

由于问题在于如何更改列名,因此我将首先解决此问题:

lapply(dflist, setNames, nm = new_col_name)

df1 <- data.frame(prod1 = 1:5, code1 = 1:5, tot1 = 1:5)
df2 <- data.frame(prod2 = 1:5, code2 = 1:5, tot2 = 1:5)

dflist <- list(df1, df2)

lapply(dflist, setNames, nm = c("prod", "code", "tot"))

[[1]]
   prod code tot
1     1    1   1
2     2    2   2
3     3    3   3
4     4    4   4
5     5    5   5


[[2]]
   prod code tot
1     1    1   1
2     2    2   2
3     3    3   3
4     4    4   4
5     5    5   5

如上所述,最好忽略列名,并使用rbindlist中的data.table来绑定行。

data.table::rbindlist(dflist, use.names = F)

答案 1 :(得分:0)

您可以使用magrittrdplyr来做到这一点:

d1 <- mtcars
d2 <- d1
d3 <- d1

names(d2) <- paste0(names(d2), "_2")
names(d3) <- paste0(names(d2), "_3")

rbind(d1, d2, d3) # gives an error, ok
#> Error in match.names(clabs, names(xi)): les noms ne correspondent pas aux noms précédents

library(magrittr, quietly = TRUE, warn.conflicts = FALSE)
library(dplyr, quietly = TRUE, warn.conflicts = FALSE)

df_list <- list(d2, d3)
df_list <- lapply(df_list, magrittr::set_colnames, names(d1))

df_final <- rbind(d1, dplyr::bind_rows(df_list) )
nrow(df_final) == 3* nrow(d1)
#> [1] TRUE