2017-09-13 110 views
0

我有一些數據框,其中有一些數字列是因式分解的,我需要將它們轉換爲數字。下面是一個示例:將因子轉換爲數字而忽略nas

y <- structure(list(y = structure(c(2L, NA, 3L, 1L, 4L, 2L), .Label = c(" 1,000,000.00 ", " 1,200,000.00 ", " 150,000.00 ", " 200,000.00 "), class = "factor")), .Names = "y", row.names = c(NA, -6L), class = "data.frame") 

數據幀中包含NAS,所以當我嘗試因子水平轉換成數字,我得到的所有NAS的回報。這是我試過的。

y <- as.data.frame(y) 
y <- as.numeric(levels(y)) 
y$y <- as.numeric(levels(y$y)[y$y]) 

而且這隻返回NA。如何將這些因子水平轉換爲數字,同時將nas保留爲na?

+0

你會需要擺脫所有的逗號首先,如果你想使用'as.numeric',例如'gsub'。 – joran

回答

1

您需要刪除逗號

as.numeric(gsub(",", "", levels(y$y)[y$y])) 

[1] 1200000  NA 150000 1000000 200000 1200000 
+0

所以這個問題與nas無關,只是逗號... –

0

你只希望保留號碼,這樣你就可以刪除一切與gsub

levels(y$y) <- gsub("[^0-9]", "", levels(y$y)) 
levels(y$y) <- as.numeric(levels(y$y)) 
#   y 
# 1 1.2e+08 
# 2 <NA> 
# 3 1.5e+07 
# 4 1e+08 
# 5 2e+07 
# 6 1.2e+08