我有五个具有相同列数的数据框。我想使用rbind
附加我的数据,但是它们具有不同的变量名。幸运的是,它具有这样的形式。
date prod1 code1 tot1
date prod2 code2 tot2
...
date prod5 code5 tot5
我想同时删除数字代码,这样我就可以重新绑定数据帧。我该怎么办?
预先感谢。
答案 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)
您可以使用magrittr
和dplyr
来做到这一点:
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