R-中间替换,需要数字数据



我试图基于组算取缺失值。我遇到了一个错误,即中位数功能需要数字数据,但是我的所有数据都是数字的,因此我看不到问题。这是一个最小可再现的例子。

set.seed(123)
cluster = sample(seq(1,10),1000,replace=TRUE)
V1 = sample(c(runif(100),NA),1000,replace=TRUE)
V2 = sample(c(runif(100),NA),1000,replace=TRUE)
df = as.data.frame(cbind(cluster,V1,V2))
df_fixed = by(df,df$cluster,function(x){replace(x,is.na(x),median(x, na.rm=TRUE))})

错误返回:

中间错误的错误(x,x,na.rm = true):需要数字数据

此代码将起作用,因此问题是中位功能。

df_fixed = by(df,df$cluster,function(x){replace(x,is.na(x),1)})
df_fixed <- apply(df[,2:3], 2, function(x) {
  md <- sapply(sort(unique(df$cluster)), function(k) median(x[df$cluster==k], na.rm=TRUE)) 
  x[is.na(x)] <- md[df$cluster][is.na(x)]
  return(x)
})  
any(is.na(df_fixed))
# [1] FALSE

相关内容

  • 没有找到相关文章

最新更新