我正在R中工作,並且有數據框dd_2006和數字向量。當我第一次導入數據時,我需要從我的三個變量中刪除$的小數點和一些空格:SumOfCost,SumOfCases和SumOfUnits。要做到這一點,我使用了str_replace_all
。但是,一旦我使用str_replace_all
,矢量被轉換爲字符。因此,我使用as.numeric(var)將矢量轉換爲數字,但引入了NAs,即使在運行as.numeric代碼之前運行下面的代碼時,向量中也沒有NAs。在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
代碼中的列#s與我在此處發佈的輸出不匹配(但它們是在原始代碼中執行的):
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中碰到了很奇怪的東西,這並不是最混亂的東西,但它可能會讓你困惑,尤其是如果你在躺在牀上之前閱讀它。
這裏是:前兩列是字符。我故意叫第二個fake_char。找出這個字符變量與Dirk在他的回覆中創建的變量的相似性。它實際上是一個轉換爲字符的數字向量。第三和第四列是因子,最後一列是「純粹」數字。
如果您使用轉換函數,您可以將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
於是,我在我的腳本上述代碼,但仍然拿出新生(沒有關於強制的警告信息)。
#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)
等等看的意見,看看是否有我的看法錯過任何字符,但沒有發現任何。關於爲什麼新生兒出現,以及如何擺脫他們的任何想法?
對不起,但是什麼問題?鏈接的答案似乎總結一切都很好,沒有一個可重現的問題的例子*你真的正在面對,我不知道其他人可以如何幫助.... – A5C1D2H2I1M1N2O1R2T1
我猜這些數據來自Excel或另一個電子表格。下一次,請在導出之前清除所有格式。 –