Изменить только определенные имена столбцов на основе таблицы данных - PullRequest
0 голосов
/ 21 января 2019

У меня есть таблица (dt_replace) с фактическими столбцами для замены и соответствующими им новыми столбцами:

column new
col1    new1
col2   new2
col3   new3
...    ...

Моя исходная таблица (dt), которую мне нужно переименовать, содержит 100 столбцов, а dt_replace - только 50 столбцов.

До сих пор я пытался использовать библиотеку dplyr с функцией rename:

c = dt_replace$column
r = dt$new
rename(dt, c = r)

Но это не сработало, затем я попробовал следующее, используя ColNames:

colnames(dt)[colnames(dt) %in% dt_replace$column] <- dt_replace$new

Это сработало, но, к сожалению, столбцы добавляются в неправильном порядке ...

1 Ответ

0 голосов
/ 21 января 2019

Попробуйте match

colnames(dt)[match(dt_replace$column, names(dt))] <- dt_replace$new

Добавление воспроизводимого примера

dt <- mtcars
dt_replace <- data.frame(column = c("mpg", "hp"), new = c("new1", "new2"), 
                         stringsAsFactors = FALSE)

colnames(dt)[match(dt_replace$column, names(dt))] <- dt_replace$new

head(dt)
#                  new1 cyl disp new2 drat    wt  qsec vs am gear carb
#Mazda RX4         21.0   6  160  110 3.90 2.620 16.46  0  1    4    4
#Mazda RX4 Wag     21.0   6  160  110 3.90 2.875 17.02  0  1    4    4
#Datsun 710        22.8   4  108   93 3.85 2.320 18.61  1  1    4    1
#Hornet 4 Drive    21.4   6  258  110 3.08 3.215 19.44  1  0    3    1
#Hornet Sportabout 18.7   8  360  175 3.15 3.440 17.02  0  0    3    2
#Valiant           18.1   6  225  105 2.76 3.460 20.22  1  0    3    1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...