лучший способ выбрать столбцы из data.table по типу - PullRequest
0 голосов
/ 19 апреля 2020

Я ищу элегантный или эффективный способ выбора столбцов в R х data.table.

Лично я ценю гибкий подход.

Поэтому я склонен ссылаться на столбцы по характеристикам, а не по именам.

Например, я хочу установить значения всех столбцов в нижний регистр.

Если я включу все столбцы в эту операцию, например,

dt[, lapply(.SD, tolower),.SDcols = names(dt)]

цифра c и целочисленные столбцы также будут преобразованы в символ (нижний регистр).

Это нежелательно, и поэтому я сначала идентифицирую все символьные столбцы как следующие:

char_cols <- as.character(names(dt[ , lapply(.SD, function(x) which(is.character(x)))]))

и впоследствии передать char_cols .SDcols

dt[ , lapply(.SD, tolower), .SDcols = char_cols ]

Если вместо этого все ваши столбцы будут символьными (например, чтобы избежать проблем с преобразованием типов при чтении данных), я бы go примерно так

char_cols <- as.character(names(dt[ , lapply(.SD, function(x) which(all(is.na(as.numeric(x)))))]))

Однако следует убедиться, что ни один столбец не имеет смешанного типа: то есть содержит несколько строк символов и некоторые числовые значения c.

Есть ли у кого-нибудь предложение к ап сделать это более элегантно или более эффективно?

Ответы [ 2 ]

0 голосов
/ 19 апреля 2020

Мы можем использовать

library(data.table)
cols <- names(which(sapply(dt, is.character)))
dt[, (cols) := lapply(.SD, tolower), .SDcols = cols]
0 голосов
/ 19 апреля 2020

Вы можете передать логический / символьный вектор в .SDcols.

Для символьных столбцов мы можем сделать

library(data.table)
cols <- names(Filter(is.character, dt))
dt[, (cols) := lapply(.SD, tolower), .SDcols = cols]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...