3 回答

TA貢獻1909條經驗 獲得超7個贊
由于(仍然)沒有人得到復選標記,我認為你有一些實際問題,主要是因為你沒有指定你想要轉換成什么類型的矢量numeric。我建議你應該應用transform函數來完成你的任務。
現在我要證明某些“轉換異常”:
# 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,這是不是在最混雜的東西,但它可以迷惑你,特別是如果你滾進睡前閱讀。
這里是:前兩列是character。我故意打電話給第二個fake_char。找出這個character變量與Dirk在他的回復中創建的變量的相似性。它實際上是一個numerical轉換為的向量character。3 次和4 次的列是factor,最后一個是“純粹的” numeric。
如果使用transform函數,則可以轉換fake_char為變量本身numeric,而不是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
但如果你在做同樣的事情,fake_char和char_fac,你會很幸運,并擺脫無NA的:
> transform(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
如果您保存已轉換data.frame并檢查mode并且class,您將獲得:
> D <- transform(d, fake_char = as.numeric(fake_char),
char_fac = as.numeric(char_fac))
> sapply(D, mode)
char fake_char fac char_fac num
"character" "numeric" "numeric" "numeric" "numeric"
> sapply(D, class)
char fake_char fac char_fac num
"character" "numeric" "factor" "numeric" "integer"
因此,結論是:是的,您可以將character矢量轉換為numeric一個,但numeric前提是它的元素是“可轉換”的。如果character向量中只有一個元素,那么在嘗試將該向量轉換為numerical1 時會出錯。
只是為了證明我的觀點:
> err <- c(1, "b", 3, 4, "e")
> mode(err)
[1] "character"
> class(err)
[1] "character"
> char <- as.numeric(err)
Warning message:
NAs introduced by coercion
> char
[1] 1 NA 3 4 NA
現在,只是為了好玩(或練習),嘗試猜測這些命令的輸出:
> fac <- as.factor(err)
> fac
???
> num <- as.numeric(fac)
> num
???
親切的問候帕特里克伯恩斯!=)

TA貢獻1826條經驗 獲得超6個贊
對我有幫助的東西:如果要轉換的變量范圍(或者只有一個變量),你可以使用sapply
。
有點荒謬,但僅舉例如:
data(cars)cars[, 1:2] <- sapply(cars[, 1:2], as.factor)
假設數據幀的第3,6-15和37列需要轉換為數字,可以:
dat[, c(3,6:15,37)] <- sapply(dat[, c(3,6:15,37)], as.numeric)
- 3 回答
- 0 關注
- 2282 瀏覽
添加回答
舉報