как изменить имя столбца в нескольких фреймах данных одновременно? - PullRequest
1 голос
/ 25 июня 2019

У меня есть пять фреймов данных, которые имеют одинаковое количество столбцов. Я хочу использовать rbind для добавления моих данных, но они имеют разные имена переменных. К счастью, он имеет такую ​​же форму, как эта.

date prod1 code1 tot1

date prod2 code2 tot2

...

date prod5 code5 tot5

Я хочу удалить числовой код одновременно, чтобы затем я мог повторно связать свои фреймы данных. Как я могу это сделать?
Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 25 июня 2019

Поскольку вопрос состоял в том, как изменить имена столбцов, я сначала рассмотрю эту проблему:

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)
0 голосов
/ 25 июня 2019

Вы можете сделать это, используя 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...