Переименуйте список переменных, используя книгу xlsx - PullRequest
0 голосов
/ 03 мая 2018

Надеюсь, что сомене может помочь мне. Я пытаюсь переименовать некоторые имена переменных, используя книгу xlsx в качестве карты данных в R. Как я могу использовать свою карту данных, чтобы переименовать имена переменных в наборе данных R в имена, определенные в базе данных в New_Name. Это то, что возможно?

   > #call dataset
    > df<-datasets::mtcars
    > #head dataset
    > head(mtcars)
                       mpg cyl disp  hp 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
    > #Call datamap
    > datamap <-read_xlsx("...")
    > #head datamap
    > head(datamap)
    # A tibble: 6 x 2
      Original_Name New_Name      
      <chr>         <chr>         
    1 mpg           MilesPerGallon
    2 cyl           Cylinder      
    3 disp          Display       
    4 hp            HorsePower    
    5 drat          D             
    6 wt            W    

Заранее благодарю всех, кто может помочь

Ответы [ 3 ]

0 голосов
/ 03 мая 2018

Я думаю, что все, что нужно OP - это заменить несколько имен столбцов фрейма данных. Отображение старого столбца с новыми именами столбцов определено в xls. Отображение уже загружено в tibble.

Может быть много способов достичь желаемого результата, но простого ifelse должно быть достаточно для обеспечения желаемого результата как:

df<-datasets::mtcars

library(readxl)

datamap <-read_xlsx("D:/test.xlsx")


names(df) <- ifelse(names(df) %in% datamap$Original_Name, datamap$New_Name, names(df) )

head(df)
#                   MilesPerGallon Cylinder Display HorsePower    D     W  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
0 голосов
/ 03 мая 2018

После того, как вы прочитали в своей книге xlsx, у вас в основном есть вектор старых имен и соответствующий вектор новых имен (datamap$Original_Name и datamap$New_Name). Если вы посмотрите на это так, у этого вопроса будет много ответов здесь: Переименовать несколько столбцов по именам

Но если вы уверены, что новые имена в правильном порядке, то вы можете просто сделать

names(DF) <- datamap$New_Name

Или, если вам нужно выстроить все в ряд

names(DF)[match(datamap$Original_Name, names(DF))] <- datamap$New_Name

Или множество других способов использования пакетов, таких как data.table, как описано в этом другом вопросе.

0 голосов
/ 03 мая 2018

Есть много разных способов сделать это. Я просто обычно переименовываю имена столбцов. Вы можете решить свою проблему так:

colnames(mtcars)[1:6] <- datamap$New_Name

Думаю, я признаю, что это не самое надежное решение. Если у вас так много столбцов, которые вы не можете подсчитать и сделать по индексу, вы можете сделать что-то более изобразительное, например

colnames(mtcars)[colnames(mtcars) %in% datamap$New_Name] <- datamap$New_Name[colnames(mtcars) %in% datamap$New_Name]

...