Значения карты в виде диктонары в R с использованием sub_str - PullRequest
1 голос
/ 18 марта 2020

У меня есть фрейм данных:

No. Region Key Value_X Percent Year
1   X   0201062 5020101062  0   %   2015
2   Y   0211032 5020211032  0   %   2015
3   Z   0216043 5020216043  0   %   2015
4   U   0415082 6040615082  0   %   2015
5   K   0401062 6040801062  0   %   2015
6   M   0601102 3060901102  0   %   2015```

Мне нужно добавить новый столбец, где значение в этом столбце отображается с помощью ключа

Я использую:

library("stringr")
dictonary <- c('02' = 'Name1', '04' = 'Name2',
             '06' = 'Name3', '08' = 'Name4')

Результаты будут:

No. Region Key Value_X Percent Year New_column
1   X   0201062 5020101062  0   %   2015 Name1
2   Y   0211032 5020211032  0   %   2015 Name1
3   Z   0216043 5020216043  0   %   2015 Name1
4   U   0415082 6040615082  0   %   2015 Name2
5   K   0401062 6040801062  0   %   2015 Name2
6   M   0601102 3060901102  0   %   2015 Name3

Какое хорошее решение этой проблемы?

Ответы [ 2 ]

3 голосов
/ 18 марта 2020

Мы можем использовать substr, чтобы получить первые 2 символа в Key и получить соответствующее значение из dictonary.

df$New_column <- dictonary[substr(df$Key, 1, 2)]
df

#  No. Region     Key    Value_X Percent Year New_column
#1   1      X 0201062 5020101062      0% 2015      Name1
#2   2      Y 0211032 5020211032      0% 2015      Name1
#3   3      Z 0216043 5020216043      0% 2015      Name1
#4   4      U 0415082 6040615082      0% 2015      Name2
#5   5      K 0401062 6040801062      0% 2015      Name2
#6   6      M 0601102 3060901102      0% 2015      Name3

data

df <- structure(list(No. = c("1", "2", "3", "4", "5", "6"), Region = c("X", 
"Y", "Z", "U", "K", "M"), Key = c("0201062", "0211032", "0216043", 
"0415082", "0401062", "0601102"), Value_X = c("5020101062", "5020211032", 
"5020216043", "6040615082", "6040801062", "3060901102"), Percent = c("0%", 
"0%", "0%", "0%", "0%", "0%"), Year = c("2015", "2015", "2015", 
"2015", "2015", "2015")), row.names = c(NA, -6L), class = "data.frame")
1 голос
/ 18 марта 2020

Без словаря с использованием factor :

df$New_column <- factor(substr(df$Key, 1, 2),
                        levels = c("02", "03", "04", "06", "08"),
                        labels = paste0("Name", 1:5))

Если мы сохраним sh, чтобы сохранить его как класс символов, просто конвертируем.

...