read.csv()将数字列解析为因子

时间:2018-01-03 02:19:58

标签: r

拥有以下数据框,其中所有列都是我想将它们用作数字列的因素。我尝试了不同的方法,但当我尝试as.numeric(as.character(.))

时,它会改变为不同的值

数据以分号分隔格式显示。重现问题的数据子集是:

rawData <- "Date;Time;Global_active_power;Global_reactive_power;Voltage;Global_intensity;Sub_metering_1;Sub_metering_2;Sub_metering_3
21/12/2006;11:23:00;?;?;?;?;?;?;
21/12/2006;11:24:00;?;?;?;?;?;?;
16/12/2006;17:24:00;4.216;0.418;234.840;18.400;0.000;1.000;17.000
16/12/2006;17:25:00;5.360;0.436;233.630;23.000;0.000;1.000;16.000
16/12/2006;17:26:00;5.374;0.498;233.290;23.000;0.000;2.000;17.000
16/12/2006;17:27:00;5.388;0.502;233.740;23.000;0.000;1.000;17.000
16/12/2006;17:28:00;3.666;0.528;235.680;15.800;0.000;1.000;17.000
16/12/2006;17:29:00;3.520;0.522;235.020;15.000;0.000;2.000;17.000
16/12/2006;17:30:00;3.702;0.520;235.090;15.800;0.000;1.000;17.000
16/12/2006;17:31:00;3.700;0.520;235.220;15.800;0.000;1.000;17.000
16/12/2006;17:32:00;3.668;0.510;233.990;15.800;0.000;1.000;17.000
"
hpc <- read.csv(text=rawData,sep=";")
str(hpc)

在删除日期和时间变量后对完整数据文件运行时,str()的输出如下所示:

> str(hpc)
'data.frame':   2075259 obs. of  7 variables:
 $ Global_active_power  : Factor w/ 4187 levels "?","0.076","0.078",..: 2082 2654 2661 2668 1807 1734 1825 1824 1808 1805 ...
 $ Global_reactive_power: Factor w/ 533 levels "?","0.000","0.046",..: 189 198 229 231 244 241 240 240 235 235 ...
 $ Voltage              : Factor w/ 2838 levels "?","223.200",..: 992 871 837 882 1076 1010 1017 1030 907 894 ...
 $ Global_intensity     : Factor w/ 222 levels "?","0.200","0.400",..: 53 81 81 81 40 36 40 40 40 40 ...
 $ Sub_metering_1       : Factor w/ 89 levels "?","0.000","1.000",..: 2 2 2 2 2 2 2 2 2 2 ...
 $ Sub_metering_2       : Factor w/ 82 levels "?","0.000","1.000",..: 3 3 14 3 3 14 3 3 3 14 ...
 $ Sub_metering_3       : num  17 16 17 17 17 17 17 17 17 16 ...

任何人都可以帮助我获得预期的输出吗?

预期产出:

 > str(hpc)
'data.frame':   2075259 obs. of  7 variables:
 $ Global_active_power  : num  "?","0.076","0.078",..: 2082 2654 2661 2668 1807 1734 1825 1824 1808 1805 ...
 $ Global_reactive_power: num  "?","0.000","0.046",..: 189 198 229 231 244 241 240 240 235 235 ...
 $ Voltage              : num  "?","223.200",..: 992 871 837 882 1076 1010 1017 1030 907 894 ...
 $ Global_intensity     : num  "?","0.200","0.400",..: 53 81 81 81 40 36 40 40 40 40 ...
 $ Sub_metering_1       : num  "?","0.000","1.000",..: 2 2 2 2 2 2 2 2 2 2 ...
 $ Sub_metering_2       : num  "?","0.000","1.000",..: 3 3 14 3 3 14 3 3 3 14 ...
 $ Sub_metering_3       : num  17 16 17 17 17 17 17 17 17 16 ...

1 个答案:

答案 0 :(得分:2)

无法测试您的数据框,但希望这会有效。我注意到在str(hpc)的输出中并非所有列都是因子。 mutate_if可以将函数应用于满足预测函数要求的函数。

library(dplyr)

hpc2 <- hpc %>%
    mutate_if(is.factor, funs(as.numeric(as.character(.))))