列に欠損値を特定するループを作成するのが難しいです。このループを使用して、小さなデータセットに列を追加し、マウスで代入してから後でマージします。出力データはエリアコードに基づいてより小さいサブセットになり、各エリアコードは異なる列で異なる欠損値を持つため、私の関数内で手作業で書くことはできません。参考のためルーピングの列と行R
:
library(mice)
ListingPricePrep<-function(Zip,dataset){
City<-subset.data.frame(dataset,dataset$ZipCode==Zip)
#Fault Area#
t1<-mice(City[,c(7,12:13,15:16,21:22,24:25,27:28,30:31)],m=1,method = "norm")
t2<-mice(City[,9:10])
df1<-mice::complete(t1)
df2<-mice::complete(t2)
City<-cbind.data.frame(City[,c(1:3,5,6,8,11,14,20,23,26,29)],df1,df2)
City$LPB<-ifelse(City$`Median Listing Price`>mean(City$`Median Listing Price`)+sd(City$`Median Listing Price`),1,0)
City$LPMMB<-ifelse(City$`Median Listing Price M/M`>0,1,0)
City$LPYYB<-ifelse(City$`Median Listing Price Y/Y`>0,1,0)
City$ALCMMB<-ifelse(City$`Active Listing Count M/M`>0,1,0)
City$ALCYYB<-ifelse(City$`Active Listing Count Y/Y`>0,1,0)
City$DOMMMB<-ifelse(City$`Days on Market M/M`>0,1,0)
City$DOMYYB<-ifelse(City$`Days on Market Y/Y`>0,1,0)
City$NLCMMB<-ifelse(City$`New Listing Count M/M`>0,1,0)
City$NLCYYB<-ifelse(City$`New Listing Count Y/Y`>0,1,0)
City$ALPMMB<-ifelse(City$`Avg Listing Price M/M`>0,1,0)
City$APLYYB<-ifelse(City$`Avg Listing Price Y/Y`>0,1,0)
City$TLCMMB<-ifelse(City$`Total Listing Count M/M`>0,1,0)
City$TLCYYB<-ifelse(City$`Total Listing Count Y/Y`>0,1,0)
City$MonthName<-month(City$Month)
fits <- list(normal = fitdistr(City$`Median Listing Price`, "normal"),
weibull = fitdistr(City$`Median Listing Price`, "weibull"),
lognormal= fitdistr(City$`Median Listing Price`,"lognormal"),
logistic= fitdistr(City$`Median Listing Price`,"logistic"),
cauchy= fitdistr(City$`Median Listing Price`,"cauchy"),
poisson= fitdistr(City$`Median Listing Price`,"poisson"),
t= fitdistr(City$`Median Listing Price`,"t")
)
print(sort(sapply(fits,function(i) i$loglik),decreasing = T))
return(City)
}
彼らは上記の指定された列の欠損値を持っているように、一部の出力は動作しますが、その他は戻ります:マウスにおける エラー(市[、C(7 、12:13,15:16,21:22,24:25,27:28,30:31)]: 欠けている値が見つかりませんでした
これは私にとって楽しいプロジェクトです。適切な都市を選んで選ぶことで仕事をしますが、私はfunctの作成を練習したいイオン機能...
はこれまでのところ、私はかなりオフベースループで以下のようだ:
for (i in 1:length(dataset)) for (j in ncol(dataset)){
dat<-names(dataset[is.na(dataset[i,j])==T])
}
P.S.コードのクリーンアップや最適化の提案についてコメントしてください。誰もが違うスタイルを持っています。
編集私は時々行方不明と時々ない、月と地域コードに依存している中央のリスト価格Y/Yのようなものを転嫁したい
。
小さなサンプルデータセットと望ましい結果を追加してください。 https://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example –
再現可能なサンプルデータセットを提供してください。 – www