我正在使用一个包含500列和20000行的数据库,我想通过统计模式更改NA数据,因此我避免删除这些值,只需通过特定列的模式进行更改,因此我得到了一个示例库来显示我正在运行的代码
library(tidyverse)
temp <- c(20.37, 18.56, NA, 21.96, 29.53, 28.16,
36.38, 36.62, 40.03, 27.59, 22.15, 19.85)
humedad <- c(88, 86, 81, 79, 80, 78,
71, NA, 78, 82, 85, 83)
precipitaciones <- c(72, 33.9, 37.5, 36.6, 31.0, 16.6,
1.2, 6.8, 36.8, 30.8, 38.5, 22.7)
precipitaciones2 <- c(72,NA, 6.8, 36.6, 31.0, 16.6,
1.2, 6.8, 36.8, 6.8, 38.5, 22.7)
precipitaciones3 <- c(72,NA, 37.5, 36, 2, 16.6,
1.2, 8, 0.8, NA, 38.5, 8)
mes <- c("enero", "febrero", "marzo", "abril", "mayo", "junio",
"julio", "agosto", "septiembre", "octubre", "noviembre", "diciembre")
datos <- data.frame(mes = mes, temperatura = temp, humedad = humedad,
precipitaciones = precipitaciones,
precipitaciones2 = precipitaciones2,
precipitaciones3 = precipitaciones3)
我想用更 Big Data 库的统计模式替换NA数据,因此需要为任何其他数据库编程,我有以下代码:
#mode
mode=getmoda<-function(v){
uniqv<-unique(v)
uniqv[which.max(tabulate(match(v,uniqv)))]
}
reemplazar<-function(y){
i=2
lista_vacia1 <- list()
lista_vacia2<-list()
a<-""
while(i<=5){
lista_vacia1<-y[,i] #select the column to filter
lista_vacia2<-lista_vacia1[!is.na(lista_vacia1)] #remove the NA data
a<-mode(lista_vacia2) #get the mode of the column
y<-y %>% mutate_at(i,~replace_na(.,a))
a<- ""
lista_vacia1 <- list()
lista_vacia2<-list()
}
}
所发生的是,当我运行程序时,它会生成一个无限循环,它不会超出加载范围,也不会显示任何消息.我希望您能帮助我了解为什么会发生这种情况,或者是否有可能更改代码.