R: добавить суффикс к именам нескольких столбцов - PullRequest
0 голосов
/ 04 августа 2020

Мне нужно переименовать несколько столбцов в R, добавив один и тот же суффикс к имени каждого столбца. Я могу сделать это, скопировав функцию переименования и каждый раз подставляя имена переменных, но я хотел бы использовать более элегантное решение.

Кроме того, я делаю это для трех разных фреймов данных, которые все имеют те же столбцы, которые мне нужно переименовать, поэтому мой код становится длиннее. В идеале я бы все это сократил до l oop или что-то в этом роде. Вот что у меня есть:

# data frames df1, df2, df3, columns a, b, c, and d:
df1 <- rename(df1, "a.df1" = a)
df1 <- rename(df1, "b.df1" = b)
df1 <- rename(df1, "c.df1" = c)
df1 <- rename(df1, "d.df1" = d)

df2 <- rename(df2, "a.df2" = a)
df2 <- rename(df2, "b.df2" = b)
df2 <- rename(df2, "c.df2" = c)
df2 <- rename(df2, "d.df2" = d)

df3 <- rename(df3, "a.df3" = a)
df3 <- rename(df3, "b.df3" = b)
df3 <- rename(df3, "c.df3" = c)
df3 <- rename(df3, "d.df3" = d)

Это работает при переименовании столбцов так, как я хочу, но мне бы хотелось, чтобы это выглядело больше как:

for (i in list(df1, df2, df3)) {
    for (j in c("a", "b", "c", "d")) {
        rename(i, "j.i" = j)
    }
}

Я пробовал несколько версии этого l oop и не могу заставить его работать. У кого-нибудь есть исправление?

Ответы [ 3 ]

0 голосов
/ 04 августа 2020
df1 %>% rename_with(.fn = ~paste0(., ".df1"), .cols = c("a", "b", "c", "d"))

Для нескольких фреймов данных вы должны сначала поместить их в список.

df_list = list(df1 = df1, df2 = df2, df3 = df3)
for(df_name in names(df_list)) {
  df_list[[df_name]] = df_list[[df_name]] %>%
    rename_with(.fn = ~paste(., df_name, sep = "."), .cols = c("a", "b", "c", "d"))
}
0 голосов
/ 04 августа 2020

Вы можете попробовать этот подход, используя rename_at

df <- data.frame(obs = 1:5, COL_A = 6:10, COL_B = 11:15, COL_C = c(10, NA, 21, NA, 7))

df2 <-  df %>% 
  rename_at(vars(-c("obs")), function(x) paste0(x, "_Your_suffix"))

df2
# obs COL_A_Your_suffix   COL_B_Your_suffix COL_C_Your_suffix
# 1   1                 6                11                10
# 2   2                 7                12                NA
# 3   3                 8                13                21
# 4   4                 9                14                NA
# 5   5                10                15                 7
0 голосов
/ 04 августа 2020

Для одного кадра,

colnms <- c("mpg","disp","cyl")
colnames(mtcars)[match(colnms, colnames(mtcars))] <- paste0(colnms, "_", 1L)
mtcars[1:2,]
#               mpg_1 cyl_1 disp_1  hp drat    wt  qsec vs am gear carb
# Mazda RX4        21     6    160 110  3.9 2.620 16.46  0  1    4    4
# Mazda RX4 Wag    21     6    160 110  3.9 2.875 17.02  0  1    4    4

Чтобы воспроизвести поверх списка кадров:

set.seed(42)
list_of_frames <- replicate(3, mtcars[1:2,sample(ncol(mtcars))], simplify = FALSE)
list_of_frames
# [[1]]
#               mpg drat carb am cyl  hp  qsec gear vs    wt disp
# Mazda RX4      21  3.9    4  1   6 110 16.46    4  0 2.620  160
# Mazda RX4 Wag  21  3.9    4  1   6 110 17.02    4  0 2.875  160
# [[2]]
#               vs  qsec  hp mpg drat    wt am cyl gear carb disp
# Mazda RX4      0 16.46 110  21  3.9 2.620  1   6    4    4  160
# Mazda RX4 Wag  0 17.02 110  21  3.9 2.875  1   6    4    4  160
# [[3]]
#               am carb  hp drat  qsec vs    wt gear cyl disp mpg
# Mazda RX4      1    4 110  3.9 16.46  0 2.620    4   6  160  21
# Mazda RX4 Wag  1    4 110  3.9 17.02  0 2.875    4   6  160  21

Map(function(df, num) { 
  colnames(df)[match(colnms, colnames(df))] <- paste0(colnms, "_", num)
  df
}, list_of_frames, seq_along(list_of_frames))
# [[1]]
#               mpg_1 drat carb am cyl_1  hp  qsec gear vs    wt disp_1
# Mazda RX4        21  3.9    4  1     6 110 16.46    4  0 2.620    160
# Mazda RX4 Wag    21  3.9    4  1     6 110 17.02    4  0 2.875    160
# [[2]]
#               vs  qsec  hp mpg_2 drat    wt am cyl_2 gear carb disp_2
# Mazda RX4      0 16.46 110    21  3.9 2.620  1     6    4    4    160
# Mazda RX4 Wag  0 17.02 110    21  3.9 2.875  1     6    4    4    160
# [[3]]
#               am carb  hp drat  qsec vs    wt gear cyl_3 disp_3 mpg_3
# Mazda RX4      1    4 110  3.9 16.46  0 2.620    4     6    160    21
# Mazda RX4 Wag  1    4 110  3.9 17.02  0 2.875    4     6    160    21
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...