Очистить Datatable - PullRequest
       10

Очистить Datatable

0 голосов
/ 07 ноября 2018

У меня есть data.table head(LocalCodes, n= 20) Local Codes 1: Crane, Indiana 0189 2: Rutland, Vermont 0401 3: NA 5003 4: Naval Air Station Patuxent River, Maryland 5001 5: Williamsburg, Virginia 7408 6: District of Columbia, District of Columbia 0132 7: Newport, Rhode Island 1702 8: NA 1805 9: NA 5306 10: Washington DC, District of Columbia / Kansas City, Missouri 2210 11: Kansas City, Missouri 0503 12: Arlington, Virginia 0501 13: Phoenix, Arizona 0301 14: Washington DC, District of Columbia 0132 15: NA 5001 16: Collbran, Colorado 0303 17: Washington DC, District of Columbia / Norfolk, Virginia 1102 18: Minot, North Dakota 1802 19: Washington DC, District of Columbia 2005 20: Pine Knot, Kentucky 4749

Я пытаюсь использовать Good <- LocalCodes[ , list( LocalCodes$Local <- unlist( strsplit( LocalCodes$Local , " / " ) ) , by=LocalCodes$Codes)] Разделить Local на "/" и сохранить то же самое Codes в новой таблице данных.

Я получаю сообщение об ошибке Error in strsplit(LocalCodes$Local, " / ") : non-character argument

Я пытался добавить as.character(LocalCodes$Local) к Good, чтобы избавиться от ошибки, но затем data.table работает некорректно. Он отделяет Local, но затем Codes не выстраиваются в очередь, потому что Local теперь является символом.

Есть ли способ отделить Local и сохранить Codes на правильном Local

* * Пример тысячу двадцать-три: Local Codes 8: NA 1805 9: NA 5306 10: Kansas City, Missouri 2210 11: Washington DC, District of Columbia 2210 12: Kansas City, Missouri 0503 13: Arlington, Virginia 0501 14: Phoenix, Arizona 0301 15: Washington DC, District of Columbia 0132 16: NA 5001 17: Collbran, Colorado 0303 18: Norfolk, Virginia 1102 19: Washington DC, District of Columbia 1102 Использование: Plyr, Dplyr, Data.Table

EDIT: Вот вывод dput:

dput(head(LocalCodes, n= 20)) structure(list(Local = list("Crane, Indiana", "Rutland, Vermont", "NA", "Naval Air Station Patuxent River, Maryland", "Williamsburg, Virginia", "District of Columbia, District of Columbia", "Newport, Rhode Island", "NA", "NA", "Washington DC, District of Columbia / Kansas City, Missouri", "Kansas City, Missouri", "Arlington, Virginia", "Phoenix, Arizona", "Washington DC, District of Columbia", "NA", "Collbran, Colorado", "Washington DC, District of Columbia / Norfolk, Virginia", "Minot, North Dakota", "Washington DC, District of Columbia", "Pine Knot, Kentucky"), Codes = list("0189", "0401", "5003", "5001", "7408", "0132", "1702", "1805", "5306", "2210", "0503", "0501", "0301", "0132", "5001", "0303", "1102", "1802", "2005", "4749")), class = c("data.table", "data.frame"), row.names = c(NA, -20L)

1 Ответ

0 голосов
/ 07 ноября 2018

Мой первоначальный ответ не был успешно выполнен с более чем одним элементом, содержащим "/". Я получил свою стратегию для работы с вариантом вашего объекта data.table, но в процессе обнаружил, что ваша структура, к сожалению, нестандартна. Обратите внимание, что вывод dput начинается с

структура (list (Local = list ("Крейн, Индиана",

Типичная таблица data.table НЕ является списком списков. Такая структура печально известна тем, что путает операции data.frame и, по-видимому, также портит data.table. Вот что исправит ваш объект данных, чтобы он выглядел как «обычный» объект данных.

LocalCodes[ , names(LocalCodes) := lapply(LocalCodes,unlist)]
#> dput(LocalCodes)
# structure(list(Local = c("Crane, Indiana", ...

Теперь это не список списков. Итак, теперь попробуйте разобраться со случаями, когда на внутренней части строк есть косые черты, отдельно от тех, где их нет, а затем связать их вместе:

 rbind( LocalCodes[grepl("/",Local) ,
            cbind( data.table(Local=unlist( strsplit(Local, split="/")),
                                     Codes=rep(Codes,each=2)))],
        LocalCodes[!grepl("/",Local)] )
                                         Local Codes
 1:       Washington DC, District of Columbia   2210
 2:                      Kansas City, Missouri  2210
 3:       Washington DC, District of Columbia   1102
 4:                          Norfolk, Virginia  1102
 5:                             Crane, Indiana  0189
 6:                           Rutland, Vermont  0401
 7:                                         NA  5003
 8: Naval Air Station Patuxent River, Maryland  5001
 9:                     Williamsburg, Virginia  7408
10: District of Columbia, District of Columbia  0132
11:                      Newport, Rhode Island  1702
snipped-----
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...