переформатировать несколько переменных с data.table в R - PullRequest
1 голос
/ 03 мая 2020

Итак, у меня есть таблица данных с тысячами переменных. Однако данные не очень чистые, поэтому я выполнил следующий фрагмент кода, чтобы удалить все - и серии - из моего dt.

dt <- as.data.table(lapply(dt, function(x) {
  gsub("-+", "", x)
}))

Однако этот код преобразует все столбцы в character векторов. Я хотел бы переформатировать все переменные в их исходное значение class, а также любые переменные, которые из class character, в число c, если это возможно (так, в случае, если переменная имеет число c, но имеет хотя бы одно наблюдение с - где-то, например 123-.

Это можно сделать с помощью fwrite(), а затем fread(), но я бы хотел избежать записи временного файла только для его повторного импорта к тому же сеансу, что и этот, занимают память и время.


Пример:

Допустим, у вас есть следующие данные:

library(data.table)

dt <- data.table(nums = 11:20,
                 char_nums = c(as.character(1:9), "10-"),
                 letters = letters[1:10])


# nums is of class integer, char_nums is of class character
str(dt)

Цель состоит в том, чтобы удалить все серии - и иметь nums и char_nums из class integer, сохраняя class character из letters.

1 Ответ

1 голос
/ 03 мая 2020

Если мы используем data.table, мы можем l oop над Подмножеством Data.table (.SD

library(data.table)
dt1 <- dt[, lapply(.SD, gsub, pattern = '-+', replacement = "")]
dt1 <- type.convert(dt1, as.is = TRUE)

str(dt1)
#Classes ‘data.table’ and 'data.frame': 10 obs. of  3 variables:
#$ nums     : int  11 12 13 14 15 16 17 18 19 20
#$ char_nums: int  1 2 3 4 5 6 7 8 9 10
#$ lett     : chr  "a" "b" "c" "d" ...

или использовать as.numeric после удаления -

dt1 <- dt[, lapply(.SD, function(x) as.numeric(gsub("-+", "", x)))]

Но это мы сделаем, только если уверены, что все столбцы обычно имеют тип numeric, но были изменены из-за -

...