前提・実現したいこと
Rの超初心者です。
データフレーム内のある列(数値が入っている)の欠損値(#NA)を0に変換したいのですが、シンプルなはずなのに、うまくいきません。どうすれば、変換できるでしょうか。
おそらく、大変初歩的なことなのだと思いますが在宅ワークのため質問できる方がおらず、こちらにて質問させていただきました。
どうぞよろしくお願いいたします。
発生している問題・エラーメッセージ
エラーメッセージ ifelse(is.na(data.selected), 0, data.selected)について エラーは出ませんが、数値が別の数値に変わってしまいました。#NAは1になったように見受けられました。 replace(data.selected, which(is.na(data.selected)), 0)については以下のメッセージが出ます。 警告メッセージ: `[<-.factor`(`*tmp*`, list, value = 0) で: 不正な因子水準です。NA が発生しました data.selected[is.na(data.selected)] <- 0については以下のメッセージが出ます。 警告メッセージ: `[<-.factor`(`*tmp*`, is.na(data.selected), value = 0) で: invalid factor level, NA generated data.selected[which(is.na(data.selected))] <- 0については以下のメッセージが出ます。 警告メッセージ: `[<-.factor`(`*tmp*`, which(is.na(data.selected)), value = 0) で: invalid factor level, NA generated na.omit(data.selected)についてはエラーは出ませんが、#NAは除去されませんでした。
該当のソースコード
#preparation data<- read.csv("20190309-1018-Org-ID1.csv", header=T)#input data options(digits=2) #change digit #Salesの列だけ抽出したい #extraction based on columnList columnList <- c("Sales") #make columnList data.selected <- data[, columnList] #access data #列中の欠損値を0に置換したい ifelse(is.na(data.selected), 0, data.selected) #or replace(data.selected, which(is.na(data.selected)), 0) #or data.selected[is.na(data.selected)] <- 0 #or data.selected[which(is.na(data.selected))] <- 0 #or na.omit(data.selected)
試したこと
ネット上にある、欠損値変換の方法について述べたページを検索し、そこに載っていたコードをすべて試してみました。
また、一度だけ、あるサイトにあった以下のコードがうまくいったことがあったのですが、後日そのコードを動かそうとしたら動きませんでした。
data %>% mutate_all(funs(ifelse(is.infinite(.),0,.))) %>%
mutate_all(funs(ifelse(is.nan(.),0,.))) %>%
mutate_all(funs(ifelse(is.na(.),0,.)))
このコードについては理解できていません。
そのサイトで述べられていた要点は、
欠損値を0にできないエラーはデータフレーム(?)中の型の違いに起因するのかもしれない、
ということだったと思います。
補足情報(FW/ツールのバージョンなど)
RStudio
Version 1.2.5042
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/04/24 06:48
2020/04/24 07:01
2020/04/24 07:06
2020/04/24 07:22
2020/04/24 08:00
2020/04/24 08:45
2020/04/24 08:58