Переименование символьных переменных в столбце во фрейме данных - R - PullRequest
0 голосов
/ 31 мая 2018

У меня есть фрейм данных, который содержит столбец с именем ProjectSubject.Длина фрейма данных составляет приблизительно 1 000 000 строк.

В столбце ProjectSubject у меня много разных строк.Вот пример:

>unique(unlist(projectdf$ProjectSubject))

[1] "Applied Learning"                           "Applied Learning, Literacy 
& Language"     
[3] "Literacy & Language"                        "Special Needs"                             
[5] "Literacy & Language, History & Civics"      "Math & Science"                            
[7] "History & Civics, Math & Science"           "Literacy & Language, 
Special Needs"        
[9] "Applied Learning, Special Needs"            "Health & Sports, Special 
Needs"            
[11] "Math & Science, Literacy & Language"        "Literacy & Language, Math 
& Science"       
[13] "Literacy & Language, Music & The Arts"      "Math & Science, Special 
Needs"             
[15] "Health & Sports"                            "Music & The Arts"                          
[17] "Math & Science, Applied Learning"           "Literacy & Language, 
Applied Learning"     
[19] "Applied Learning, Music & The Arts"         "History & Civics, 
Literacy & Language"     
[21] "Applied Learning, Math & Science"           "Health & Sports, Math & 
Science"           
[23] "Applied Learning, Health & Sports"          "History & Civics"                          
[25] "History & Civics, Music & The Arts"         "Math & Science, History & 
Civics"          
[27] "Math & Science, Music & The Arts"           "Special Needs, Music & 
The Arts"           
[29] "History & Civics, Applied Learning"         "History & Civics, Special 
Needs"           

Мне нужен краткий, не ручной способ, чтобы просмотреть весь столбец во фрейме данных и заменить кучу этих строк другой.Например, я хотел бы заменить «Прикладное обучение, особые потребности» на «Особые потребности» или аналогичным образом заменить «Прикладное обучение, математика и естественные науки» на «Математика».

У меня около 50 уникальных строк.как пример кода, приведенный выше, который я хочу сократить до 10 уникальных строк.Предпочтительно есть метод, в котором мне не нужно делать это без ручного ввода строки кода для каждой из 50 строк.

Ответы [ 2 ]

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

Если вы уже знаете, какие строки вы хотите изменить, одним из решений может быть использование gsub.

projectdf$ProjectSubject <- gsub("Applied Learning, Special Needs", "Special Needs", projectdf$ProjectSubject)

Это изменит строку «Прикладное обучение, особые потребности» на просто «Особые потребности». Это может быть утомительно при вызовах 50 gsub, поэтому некоторые умные регулярные выражения могут помочь обойти этоНапример, если какая-либо строка содержит «Особые потребности», замените ее на «Особые потребности»:

projectdf$ProjectSubject <- gsub("^.*?Special Needs", "Special Needs", projectdf$ProjectSubject)
0 голосов
/ 31 мая 2018

Вот способ, который я считаю хорошим:

# first create some fake data that approximates your situation
set.seed(6933)

fruit_words <- c("apple", "orange", "banana", "pappels", "orong", "bernaner")

dat <- data.frame(fruit = sample(fruit_words, size=10, replace=TRUE), 
                  stringsAsFactors=FALSE)

Создайте таблицу, связывающую каждое уникальное значение dat$fruit с желаемой категорией / строкой, которую вы хотите заменить:

fruit_lkup <- c(apple="appl", orange="orng", banana="bnna", 
                pappels="appl", orong="orng", bernaner="bnna")

Затем используйте тот факт, что dat$fruit содержит имена fruit_lkup

dat$fruit_clean <- as.character(fruit_lkup[dat$fruit])

И вот результат:

print(dat)
##       fruit   fruit_clean
## 1   pappels        appl
## 2     orong        orng
## 3     apple        appl
## 4    banana        bnna
## 5     apple        appl
## 6  bernaner        bnna
## 7  bernaner        bnna
## 8   pappels        appl
## 9  bernaner        bnna
## 10 bernaner        bnna

Так что на самом деле большая часть работы заключается в созданииобъект, который вы используете для поиска значений - fruit_lkup.

Один из способов начать это просто использовать dput(unique(dat$fruit)), затем вставить его в скрипт и начать предоставлять значения, которые вы хотите заменить.

Если существует слишком много уникальных значений, вы также можете записать уникальные значения в CSV, а затем вручную добавить значения, которые вы хотите заменить после них.Тогда вы могли бы прочитать (теперь) csv с двумя столбцами как фрейм данных (скажем, lookup_df) и создать fruit_lkup с fruit_lkup <- setNames(lookup_df$new_values, lookup_df$old_values)

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

Надеюсь, это поможет ~~

...