2017-09-13 61 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