2017-03-14 10 views
1

私はRで作業しており、700行と10列からなるデータセットを持っていますが、値の一部は '?'値として。私は '?'値がであるため、is.na()関数がここで機能するかどうかはわかりません。データセットを行列に変換し、 '?'を検索した後にそれを0に置き換えると、それは役に立ちますか?を '?'に置き換えます。 0のデータセットで

私はこのコードを試してみました。この後

datafile <- sapply(datafile, function(y){if (y=='?') 0 else y}) 

私はテキストファイルとしてファイルを保存したが、?は離れて行きませんでした。

+0

は、あなたが 'を見てきましたが()'を交換しますか? – Stedy

+0

あなたは私に例を挙げることができますか?それは本当に役に立ちます – user47

+0

私に例を教えてもらえますか?それは本当に役に立つだろう – user47

答えて

1

データセットに他のNA値があるかどうかによって異なります。そうでない場合は、na.strings=引数をread.(table|csv|cv2|delim)に、つまりdd <- read.csv(...,na.strings=c("?","NA")のような形式でデータを読むことが最も簡単な方法です。その後

dd[is.na(dd)] <- 0 

何らかの理由で、プロセスのこの部分の制御を持っていない場合(例えば、誰かがあなたに.rdaファイルを手渡し、あなたは、元のCSVを持っていない)、それはもう少し面倒です - - あなたは

which.qmark <- which(x=="?") 
x <- suppressWarnings(as.numeric(as.character(x))) 
x[which.qmark] <- 0 

(あなたがあなたのデータの両方の?およびその他のNA値を持っている場合は、このバージョンでも動作します)

2

を必要とするあなたも行列に変換する必要はありません。 Ben Bolker氏が言ったように、あなたの最善の選択肢は、ファイルを読むときにna.stringsを使うことです。

データフレームは、あなたが直接行うことができ、ファイルから来ていない場合:

df[df=="?"] <- 0 

あなたは文字を含むことは何が要因に変換されるかもしれませんが覚えておく必要があります。そのような場合は、これらの要因を文字に変換する必要があります。

# check which variables are factors 
isfactor <- sapply(df, is.factor) 
# convert them to character 
# I use lapply bcs that returns a list, and I use the 
# list-like selection of "elements" (variables) to replace 
# the variables 
df[isfactor] <- lapply(df[isfactor], as.character) 

あなたは一緒にすべてをかけるのであれば、あなたが得る:ベンは、より穏やかなアプローチここでは、あなたのブルートフォースオプションを与えるのか?

df <- data.frame(
    a = c(1,5,3,'?',4), 
    b = c(3,'?','?',3,2) 
) 
isfactor <- sapply(df, is.factor) 
df[isfactor] <- lapply(df[isfactor], as.character) 

df[df=="?"] <- 0 
df 
関連する問題