私はRで作業しており、数値ベクトルを持つデータフレームdd_2006を持っています。最初にデータをインポートしたとき、$、小数点、およびいくつかの空白を、3つの変数、SumOfCost、SumOfCases、およびSumOfUnitsから削除する必要がありました。そのために、str_replace_all
を使用しました。しかし、一度str_replace_all
を使用すると、ベクトルは文字に変換されました。だからas.numeric(var)を使ってベクトルを数値に変換しましたが、as.numericコードを実行する前に以下のコードを実行しても、ベクトルにはNAsはありませんでした。NA強制なしで文字を数値に変換するR
sum(is.na(dd_2006$SumOfCost))
[1] 0
sum(is.na(dd_2006$SumOfCases))
[1] 0
sum(is.na(dd_2006$SumOfUnits))
[1] 0
ここでは、インポート後のコードをベクトルから$を削除しています。 str(dd_2006)
の出力では、スペースのためにいくつかの変数が削除されていますので、str_replace_all
のコードの列番号は、ここに投稿した出力と一致しません(ただし、元のコードと同じです)。
library("stringr")
dd_2006$SumOfCost <- str_sub(dd_2006$SumOfCost, 2,) #2=the first # after the $
#Removes decimal pt, zero's after, and commas
dd_2006[ ,9] <- str_replace_all(dd_2006[ ,9], ".00", "")
dd_2006[,9] <- str_replace_all(dd_2006[,9], ",", "")
dd_2006[ ,10] <- str_replace_all(dd_2006[ ,10], ".00", "")
dd_2006[ ,10] <- str_replace_all(dd_2006[,10], ",", "")
dd_2006[ ,11] <- str_replace_all(dd_2006[ ,11], ".00", "")
dd_2006[,11] <- str_replace_all(dd_2006[,11], ",", "")
str(dd_2006)
'data.frame': 12604 obs. of 14 variables:
$ CMHSP : Factor w/ 46 levels "Allegan","AuSable Valley",..: 1 1 1
$ FY : Factor w/ 1 level "2006": 1 1 1 1 1 1 1 1 1 1 ...
$ Population : Factor w/ 1 level "DD": 1 1 1 1 1 1 1 1 1 1 ...
$ SumOfCases : chr "0" "1" "0" "0" ...
$ SumOfUnits : chr "0" "365" "0" "0" ...
$ SumOfCost : chr "0" "96416" "0" "0" ...
は、私は次のコードを使用して、同様の質問への応答がhereを採掘することが分かっ:
# create dummy data.frame
d <- data.frame(char = letters[1:5],
fake_char = as.character(1:5),
fac = factor(1:5),
char_fac = factor(letters[1:5]),
num = 1:5, stringsAsFactors = FALSE)
は、私たちはdata.frame
> d
char fake_char fac char_fac num
1 a 1 1 a 1
2 b 2 2 b 2
3 c 3 3 c 3
4 d 4 4 d 4
5 e 5 5 e 5
で一目を持ってみましょう
と実行しましょう:
> sapply(d, mode)
char fake_char fac char_fac num
"character" "character" "numeric" "numeric" "numeric"
> sapply(d, class)
char fake_char fac char_fac num
"character" "character" "factor" "factor" "integer"
これで、「どこが異常ですか?」まあ、私はRの非常に特異なものにぶつかってきましたが、これは最も混乱することではありませんが、あなたを混乱させる可能性があります。
ここに行く:最初の2つの列は文字です。私は意図的に2番目のfake_charを呼び出しました。この文字変数の類似点を、Dirkが返信で作成したものと比較します。これは実際には文字に変換された数値ベクトルです。第3列と第4列は因子であり、最後の列は「純粋な」数値です。
変換関数を使用する場合は、fake_charを数値に変換できますが、char変数自体は変換できません。
> transform(d, char = as.numeric(char))
char fake_char fac char_fac num
1 NA 1 1 a 1
2 NA 2 2 b 2
3 NA 3 3 c 3
4 NA 4 4 d 4
5 NA 5 5 e 5
Warning message:
In eval(expr, envir, enclos) : NAs introduced by coercion
but if you do same thing on fake_char and char_fac, you'll be lucky, and get away with no NA's:
(D、fake_char = as.numeric(fake_char)、 char_fac = as.numeric(char_fac))変換
char fake_char fac char_fac num
1 a 1 1 1 1
2 b 2 2 2 2
3 c 3 3 3 3
4 d 4 4 4 4
5 e 5 5 5 5
だから私は私のスクリプトで上記のコードを試してみましたしかし、まだNAs(強制に関する警告メッセージなし)が出てきました。
#changing sumofcases, cost, and units to numeric
dd_2006_1 <- transform(dd_2006, SumOfCases = as.numeric(SumOfCases), SumOfUnits = as.numeric(SumOfUnits), SumOfCost = as.numeric(SumOfCost))
> sum(is.na(dd_2006_1$SumOfCost))
[1] 12
> sum(is.na(dd_2006_1$SumOfCases))
[1] 7
> sum(is.na(dd_2006_1$SumOfUnits))
[1] 11
私も観測で逃した任意の文字があるかどうかを確認するために観測を見てtable(dd_2006$SumOfCases)
などを使用しましたが、任意のはありませんでした。なぜNAsがポップアップしているのか、どうやってそれらを取り除くのかについての考えはありますか?
申し訳ありませんが、何が問題ですか?リンクされた答えは、すべてを非常にうまくまとめているようですが、問題の再現可能な例がなくても、あなたは実際に直面しています。私は他の人がどのように助けてくれるのかよくわかりません... – A5C1D2H2I1M1N2O1R2T1
このデータはExcelまたは別のスプレッドシート。次回は、エクスポートする前にすべての書式を消去してください。 –