3 回答

TA貢獻(xiàn)1909條經(jīng)驗(yàn) 獲得超7個(gè)贊
由于(仍然)沒有人得到復(fù)選標(biāo)記,我認(rèn)為你有一些實(shí)際問題,主要是因?yàn)槟銢]有指定你想要轉(zhuǎn)換成什么類型的矢量numeric。我建議你應(yīng)該應(yīng)用transform函數(shù)來完成你的任務(wù)。
現(xiàn)在我要證明某些“轉(zhuǎn)換異?!保?/p>
# 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
讓我們運(yùn)行:
> 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"
現(xiàn)在你可能會(huì)問自己“哪里有異常?” 嗯,我碰到了很奇特的事情R,這是不是在最混雜的東西,但它可以迷惑你,特別是如果你滾進(jìn)睡前閱讀。
這里是:前兩列是character。我故意打電話給第二個(gè)fake_char。找出這個(gè)character變量與Dirk在他的回復(fù)中創(chuàng)建的變量的相似性。它實(shí)際上是一個(gè)numerical轉(zhuǎn)換為的向量character。3 次和4 次的列是factor,最后一個(gè)是“純粹的” numeric。
如果使用transform函數(shù),則可以轉(zhuǎn)換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,你會(huì)很幸運(yùn),并擺脫無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
如果您保存已轉(zhuǎn)換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"
因此,結(jié)論是:是的,您可以將character矢量轉(zhuǎn)換為numeric一個(gè),但numeric前提是它的元素是“可轉(zhuǎn)換”的。如果character向量中只有一個(gè)元素,那么在嘗試將該向量轉(zhuǎn)換為numerical1 時(shí)會(huì)出錯(cuò)。
只是為了證明我的觀點(diǎn):
> 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
現(xiàn)在,只是為了好玩(或練習(xí)),嘗試猜測(cè)這些命令的輸出:
> fac <- as.factor(err)
> fac
???
> num <- as.numeric(fac)
> num
???
親切的問候帕特里克伯恩斯!=)

TA貢獻(xiàn)1826條經(jīng)驗(yàn) 獲得超6個(gè)贊
對(duì)我有幫助的東西:如果要轉(zhuǎn)換的變量范圍(或者只有一個(gè)變量),你可以使用sapply
。
有點(diǎn)荒謬,但僅舉例如:
data(cars)cars[, 1:2] <- sapply(cars[, 1:2], as.factor)
假設(shè)數(shù)據(jù)幀的第3,6-15和37列需要轉(zhuǎn)換為數(shù)字,可以:
dat[, c(3,6:15,37)] <- sapply(dat[, c(3,6:15,37)], as.numeric)

TA貢獻(xiàn)1936條經(jīng)驗(yàn) 獲得超7個(gè)贊
如果x
是dataframe的列名dat
,并且x
是因子類型,請(qǐng)使用:
as.numeric(as.character(dat$x))
- 3 回答
- 0 關(guān)注
- 2276 瀏覽
添加回答
舉報(bào)