Вот возможное решение проблемы классификации столбцов при вызове read.csv
.
Скажем, я не хочу возиться с изменением классов после чтения данных в R. Если я хочу, чтобы один столбец был character
, а остальные — классом по умолчанию, я могу использовать readLines
для быстрого чтения первой строки . csv (т. е. строку заголовка столбца, если она есть) и настройте вектор, который будет передаваться в аргумент colClasses
функции read.csv
.
Вот простая функция,
col.classes <- function(csv, col, class){
g <- readLines(csv, n = 1)
n <- unlist(strsplit(g, ","))
col.classes <- ifelse(n %in% col, class, NA)
return(col.classes)
}
Чтобы показать, как это работает, предположим, что у меня есть файл с именем cats.csv (так получилось, что он у меня есть), и я знаю, что хочу, чтобы столбец weight был класс character
и остальные столбцы в качестве класса по умолчанию. Имейте в виду, что colClasses
может быть вектором символов, и для элементов, которые являются NA
, соответствующий столбец данных пропускается и классифицируется, как если бы он был прочитан без colClasses
.
Просмотр имен столбцов в файле
names(read.csv('cats.csv'))
## [1] "cats" "colour" "length" "weight" "mu"
Посмотреть классы по умолчанию от read.csv
> sapply(read.csv('cats.csv'), class)
## cats colour length weight mu
## "integer" "factor" "integer" "integer" "integer"
Прогоны образцов:
(1) Классифицировать столбец length как numeric
при вызове read.csv
, оставляя другие значения по умолчанию.
> cc1 <- col.classes('cats.csv', 'length', 'numeric')
> rr1 <- read.csv('cats.csv', colClasses = cc1)
> sapply(rr1, class)
## cats colour length weight mu
## "integer" "factor" "numeric" "integer" "integer"
(2) Аналогичным образом классифицируйте столбец weight как character
.
> cc2 <- col.classes('cats.csv', 'weight', 'character')
> rr2 <- read.csv('cats.csv', colClasses = cc2)
> sapply(rr2, class)
## cats colour length weight mu
## "integer" "factor" "integer" "character" "integer"
Не уверен, что это вам вообще поможет. Я нахожу это полезным, когда мне нужно смешать классы столбцов, которые в противном случае могли бы быть неуклюжими и разочаровывающими, чтобы изменить их после того, как данные уже загружены в R.
person
Rich Scriven
schedule
03.05.2014