Составьте список столбцов числовой — R

#r

Вопрос:

Как всегда, приношу извинения за простой вопрос.

У меня большой набор данных, и я хочу изменить указанный список столбцов в числовой класс. Я могу это сделать, но это не очень элегантно, и если я не изменю требования к памяти, она не будет работать, так как слияние слишком истощает векторную память!

 library(tidyverse)

#Extract column names I want to turn into numeric from data
make_numeric <- data[252:321] %>% select(-c(contains("UNITS"))) %>% colnames()
 

Здесь я хочу превратить столбцы, содержащиеся в make_numeric , в as.numeric и вставить их обратно data . Я не могу сделать это за один раз, поэтому вместо этого я извлекаю данные, конвертирую и затем объединяю.

 tmp <- data %>% select(record_id, make_numeric)
tmp <- lapply(tmp[2:56], as.numeric)
tmp <- as.data.frame(tmp)
tmp2 <- data %>% select(-make_numeric)
tmp3 <- merge(tmp, tmp2)
 

Я уверен, что должен быть лучший способ…

Комментарии:

1. Почему они для начала не импортируются как числовые? Или это не вариант?

2. Не вариант….

Ответ №1:

Существует решение dplyr:

 library(tidyverse)
library(dplyr)

#Extract column names I want to turn into numeric from data
make_numeric <- data[252:321] %>% select(-c(contains("UNITS"))) %>% colnames()

#Mutate desired columns to numeric
data <- data %>% mutate_at(vars(make_numeric), as.numeric)
 

Ответ №2:

Работает ли это?

 library(data.table)

#convert to data.table
dt<- as.data.table(data)

#change colnames to numeric
dt[, colnames(dt)[colnames(dt) %in% cols] := lapply(.SD, as.numeric), .SDcols = colnames(dt)[colnames(dt) %in% cols]]

 

Комментарии:

1. К сожалению, нет… Error in [.данные.таблица (dt, , := (make_numeric, lapply(.SD, as.numeric)), : Supplied 56 items to be assigned to 6310 items of column 'make_numeric'. If you wish to 'recycle' the RHS please use rep() to make this intent clear to readers of your code.

2. А как насчет сейчас?