Изменить столбцы в нескольких dfs в зависимости от имени df в al oop (R) - PullRequest
1 голос
/ 04 марта 2020

Я хочу изменить имена столбцов в нескольких dfs в al oop, где новые имена столбцов зависят от имени df:

library(dplyr)

# A simple example of my data:
dataframe_AA <- data.frame(
  var1 = sample(1:3),
  var2 = sample(1:3),
  var3 = sample(1:3))

dataframe_AB <- data.frame(
  var1 = sample(1:3),
  var2 = sample(1:3),
  var3 = sample(1:3))


dfs <- list(dataframe_AA, dataframe_AB)
combinations <- c("AA", "AB")
oldnames = c("var1", "var2", "var3")

for (df in seq_along(dfs)) {
  for (combi in combinations) {
    newnames = paste(oldnames, substr = substring(combi,1,2), sep = "_")
    df <- df %>% rename_at(vars(oldnames), ~newnames)
  }
  }



#Expected outcome:
names(dataframe_AA)
[1] "var1_AA" "var2_AA" "var3_AA"

names(dataframe_AB)
[1] "var1_AB" "var2_AB" "var3_AB"

newnames успешно создан внутри l oop, но затем я получаю сообщение об ошибке: Error in UseMethod("tbl_vars") : no applicable method for 'tbl_vars' applied to an object of class "c('integer', 'numeric')"

Делать все, что за пределами al oop работает, однако:

df = dataframe_AA
combi = "AA"
newnames = paste(oldnames, substr = substring(combi,1,2), sep = "_")
df <- df %>% rename_at(vars(oldnames), ~newnames)

print(names(df))
[1] "var1_AA" "var2_AA" "var3_AA"


Я не понимаю, что я делаю что-то не так и как я могу заставить это работать в al oop.

1 Ответ

1 голос
/ 04 марта 2020

Мы можем использовать mget, чтобы получить фреймы данных в списке, а затем вставить новые переменные, основанные на имени фрейма данных.

library(dplyr)
library(purrr)



temp <- imap(mget(ls(pattern = "dataframe_.*")), function(x, y) 
          x %>% rename_at(vars(oldnames), ~paste0(., sub(".*_", "_", y))))

temp - это список фреймов данных с измененными именами, чтобы получить отдельные кадры данных в глобальной среде мы можем использовать list2env.

list2env(temp, .GlobalEnv)

names(dataframe_AA)
#[1] "var1_AA" "var2_AA" "var3_AA"
names(dataframe_AB)
#[1] "var1_AB" "var2_AB" "var3_AB"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...