Чтение нескольких целочисленных столбцов в виде строки, пытаясь gsub и конвертировать обратно в целое
У меня есть около 30 столбцов в рамках более 100 столбцов данных. файл, который я читаю, хранит его номера в виде символов. Другими словами, 1300 - 1300, и R думает, что это персонаж.
Я пытаюсь решить эту проблему, заменив ","
ни с чем и превратить поле в целое число. Я не хочу использовать gsub
на каждом столбце, который имеет проблему. Я бы предпочел хранить столбцы как вектор, который имеет проблему, и выполнять одну функцию или loop
со всеми колоннами.
Я пытался использовать lapply
, но не уверен, что поставить как "x
переменная
Вот моя функция с ошибкой под ней
ItemStats_2014[intColList] <- lapply(ItemStats_2014[intColList],
as.integer(gsub(",", "", ItemStats_2014[intColList])) )
Ошибка в
[.data.table
(ItemStats_2014, intColList): Когда i является таблицей данных (или символьным вектором), столбцы, к которым нужно присоединиться, должны быть указаны либо с помощью аргумента on= (см.? Data.table), либо путем ввода x (т. Е. Отсортировано, и помечены как отсортированные, см.?setkey). Связи с ключами могут иметь дополнительные преимущества в скорости для очень больших данных из-за сортировки x в ОЗУ.
2 ответа
Попробуйте использовать dplyr::mutate_at()
выбрать несколько столбцов и применить к ним преобразование.
ItemStats_2014 <- ItemStats_2014 %>%
mutate_at(intColList, funs(as.integer(gsub(',', '', .))))
mutate_at
выбирает столбцы из списка или использует функцию выбора dplyr (см. ?select_helpers
) затем применяет одну или несколько функций к каждому столбцу. .
в gsub относится к каждому выбранному столбцу, который mutate_at
переходит к нему. Вы можете думать об этом как x
в function(x) ...
,
Файл, который я читаю, хранит его номера в виде символов [с запятыми в качестве десятичного разделителя]
Просто прочитайте эти столбцы как десятичные, а не как строки:data.table::fread()
понимает десятичные разделители: dec=','
по умолчанию.
Возможно, вам придется поиграть с fread(..., colClasses=(...) )
Аргумент немного, чтобы указать целочисленные столбцы:
myColClasses <- rep('string',100) # for example...
myColClasses[intColList] <- 'integer'
# ...any other colClass fixup as needed...
ItemStats_2014 <- fread('your.csv', colClasses=myColClasses)
Этот подход проще и быстрее и использует гораздо меньше памяти, чем чтение в виде строки, а затем преобразование позже.