#r #dataframe #imputation
#r #фрейм данных #вменение
Вопрос:
Я хочу заменить с NA на случайные значения. В этом фрейме данных есть столбцы типа «Dayofweek», и я не знаю, как я могу завершить этот фрейм данных. Я пытаюсь с помощью функции missforest, но, я думаю, эта функция работает со столбцами с целым числом. Есть ли у вас какие-либо идеи, как я могу заполнить все столбцы?
travel <- read.csv("https://openmv.net/file/travel-times.csv")
library(missForest)
summary(travel)
set.seed(82)
travel1 <- prodNA(travel, noNA = 0.2)
travel2 <- missForest(travel1)
Ответ №1:
Вы можете использовать пакет imputeTS для вставки случайных значений во временные ряды. Для na_random
этого можно использовать функцию. Функция может использоваться для числовых столбцов (другие столбцы останутся нетронутыми, что может быть полезно, поскольку вам, вероятно, не нужны случайные тексты для столбца комментариев)
Вы можете вызвать
library("imputeTS")
na_random(yourData)
и функция будет искать наименьшее и наибольшее значение каждого столбца и вставлять случайные значения между этими границами для вас.
Но вы также можете определить свои собственные границы для случайных значений следующим образом:
library("imputeTS")
na_random(yourData, lower_bound = 0, upper_bound = 25)
Для ваших данных это может выглядеть так:
library("imputeTS")
# To read the input correctly and have the right data types
travel <- read.csv("https://openmv.net/file/travel-times.csv", na.strings = "")
travel$FuelEconomy <- as.numeric(travel$FuelEconomy)
# To perform the missing data replacement
travel <- na_random(travel)
Ответ №2:
Во-первых, если вы хотите читать ""
строки как NA
s, вам нужен дополнительный аргумент na.strings = ""
in read.csv
. Тогда вы имеете в виду замену наблюдения NA переменной другим случайным наблюдением той же переменной? Если это так, рассмотрите следующую процедуру:
travel <- read.csv("https://openmv.net/file/travel-times.csv", na.strings = "")
set.seed(82)
res <- data.frame(lapply(travel, function(x) {
is_na <- is.na(x)
replace(x, is_na, sample(x[!is_na], sum(is_na), replace = TRUE))
}))
res
выглядит так
Date StartTime DayOfWeek GoingTo Distance MaxSpeed AvgSpeed AvgMovingSpeed FuelEconomy TotalTime MovingTime Take407All Comments
1 1/6/2012 16:37 Friday Home 51.29 127.4 78.3 84.8 8.5 39.3 36.3 No Medium amount of rain
2 1/6/2012 08:20 Friday GSK 51.63 130.3 81.8 88.9 8.5 37.9 34.9 No Put snow tires on
3 1/4/2012 16:17 Wednesday Home 51.27 127.4 82.0 85.8 8.5 37.5 35.9 No Heavy rain
4 1/4/2012 07:53 Wednesday GSK 49.17 132.3 74.2 82.9 8.31 39.8 35.6 No Accident blocked 407 exit
5 1/3/2012 18:57 Tuesday Home 51.15 136.2 83.4 88.1 9.08 36.8 34.8 No Rain, rain, rain
6 1/3/2012 07:57 Tuesday GSK 51.80 135.8 84.5 88.8 8.37 36.8 35.0 No Backed up at Bronte
7 1/2/2012 17:31 Monday Home 51.37 123.2 82.9 87.3 - 37.2 35.3 No Pumped tires up: check fuel economy improved?
8 1/2/2012 07:34 Monday GSK 49.01 128.3 77.5 85.9 - 37.9 34.3 No Pumped tires up: check fuel economy improved?
9 12/23/2011 08:01 Friday GSK 52.91 130.3 80.9 88.3 8.89 39.3 36.0 No Police slowdown on 403
10 12/22/2011 17:19 Thursday Home 51.17 122.3 70.6 78.1 8.89 43.5 39.3 No Start early to run a batch