#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. А как насчет сейчас?