全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 R语言论坛
1940 2
2018-05-10
本人最近在研究缺失值处理的方法,在使用中位数插值的时候,遇到了一个问题。看代码
dt <- data.frame(a = c('1','2','','4', '5', '6', '7'),
                    b = c(6, 1, 8, 9, 10, NA, 12),
                    c = as.Date('2012-2-2','2012-2-2','2012-2-2','2012-2-2','2012-2-2','2012-2-2','2012-2-2'))

#构造中位数法
Medi <- function(input){
  for (i in 1:ncol(input)) {
    if(is.numeric(input[,i])){
      output[, i] <- impute(input[, i], median)
    }
  }
  output[, i] <- as.numeric(output[, i])
  return(output)
}

#执行处理
library(Hmisc)
options(digits = 3)
out <- dt
out <- eval(parse(text = 'Medi'))(dt)


> class(out$b)
[1] "impute"


最终得出来的结果,out$b 的类型是impute,然后我写出到数据库,类型变成了text。百思不得其解,我明明已经
as.numeric了,还是不能变成数值型。求解各位大神,原因是什么?我应该如何修改?

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2018-5-10 11:20:44
library(dplyr)

dt <- data.frame(a = c('1','2','','4', '5', '6', '7'),
                 b = c(6, 1, 8, 9, 10, NA, 12),
                 c = as.Date('2012-2-2','2012-2-2','2012-2-2','2012-2-2','2012-2-2','2012-2-2','2012-2-2'))




dt002=dt%>%mutate(b= ifelse(is.na(b), median(b, na.rm=TRUE), b))
dt002
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2018-5-10 13:49:44
rainningpoet 发表于 2018-5-10 11:20
library(dplyr)

dt %mutate(b= ifelse(is.na(b), median(b, na.rm=TRUE), b))
太棒了,这种方式比我的方式简单多了!不过想请教一下,我的代码该如何修改呢?
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群