#r #dataframe #multiple-columns #names
Вопрос:
У меня есть большой набор данных, состоящий из множества очень специфических переменных. Я ищу способ упростить имена столбцов с помощью быстрого метода, а не вручную изменять более 1000 столбцов.
total.population.2020 <- c("1","2" )
total.population.2020.both.sexes <- c("3", "4")
total.population.2020.sexes.males.14.to.16.years <- c("7", "9")
total.income.2020 <- c("55", "40")
total.income.2020.25.to.30.years <- c("80", "90")
df <- data.frame(total.population.2020, total.population.2020.both.sexes, total.population.2020.sexes.males.14.to.16.years, total.income.2020, total.income.2020.25.to.30.years)
Сначала я запустил функцию clean_names от уборщика, потому что использование gsub/аббревиатуры в исходном df уничтожило бы все имя столбца, оставив его пустым, а не упростив его.
library(janitor)
df <- clean_names(df)
Затем я бы запустил gsub/сокращение. Однако я сталкиваюсь с проблемой, что сокращения все еще очень длинные (10 символов ) и отсутствуют числа, которые я бы посчитал важными идентификаторами (например. Возраст от 20 до 25 лет). Это требует, чтобы я все равно вручную изменил имена столбцов.
names(df) <- abbreviate(gsub("_", " ", names(df)))
df
Есть ли более простой метод? Как бы вы подошли к большому набору данных с длинными именами столбцов?
Ожидаемый Результат:
Старый | Новое |
---|---|
total.population.2020 |
тп |
total.population.2020.both.sexes |
tpb |
total.population.2020.sexes.males.14.to.16.years |
tpm14_16 |
total.income.2020 |
ти |
total.income.2020.25.to.30.years |
ti25_30 |
Комментарии:
1. Так-то лучше. Это все еще может быть непросто. Вы можете начать с использования чего-то вроде
gsub("(.).*\.", "\1", nm)
захвата только первой буквы каждого элемента, разделенного точками (или сначала использоватьstrsplit
разделитель точек, а затем использоватьsubstr
для получения первой буквы); затем применить другие правила для особых случаев, такие как преобразование «20xx» в «xx», когда xx числовые; и т. Д. (Больше возни с регексами, чем у меня сейчас времени …)2. Есть еще одна проблема, связанная с этим ожиданием. Предположим, у вас есть имя столбца с
"total.population.2021". I assume your New is takingthe first 2 digits ? or last 2 digits? Also
total.income.2020.25.to.30.лет, ожидаемое значение ti25_30, если есть 2021 год, оно дублируется3. @akrun Нет 2021 года, все данные поступают из одного и того же года (2020 для этого примера). Я исправлю сообщение, и 20 можно будет удалить из нового.
4. Я думаю, что простым способом было бы создать таблицу поиска (аналогичную ожидаемым результатам) и изменить имена столбцов, сопоставив имена столбцов с этими данными.
5. @RonakShah Не будет ли таблица поиска означать, что мне нужно будет вручную создать более 1000 имен переменных? Или был бы более быстрый метод, чем ручной ввод имени переменной по имени переменной в таблице?