NA值和数值数据类型

时间:2017-05-16 16:02:57

标签: r

我目前正在使用read.xlsx包中的xlsx将数据从Excel电子表格写入数据框。我的问题是数据框变为类型字符,因为从文件读取的第一行具有NA值。使用as.numeric转换帧只会搞砸格式化。所以目前,我运行这样的命令:

CDF<- read.xlsx(wb, sheet=1, startRow=2,cols=c(2,3))
然后

CDF等于具有以下值的数据帧:

  

    NA                     NA     
1 3.1569948515638899E-3  4.2560545366418102E-2                        
2 4.6179211819458499E-2  0.43699596110695599          
3 9.3875238651998996E-2  0.63041471352096301     
4 7.1254813513786902E-2  0.76236994294326599

没关系。但我需要从第1行开始运行命令,而不是第2行。如果我运行CDF<- read.xlsx(wb, sheet=1, startRow=1,cols=c(2,3)),那么我得到的数据框是

  jobs.1000output.ratio     earn.output.ratio
1                      NA                    NA
2   3.1569948515638899E-3 4.2560545366418102E-2
3   4.6179211819458499E-2   0.43699596110695599
4   9.3875238651998996E-2   0.63041471352096301
5   7.1254813513786902E-2   0.76236994294326599
6   4.2305078854580701E-2   0.61710149253731295

但在这种情况下,我从CDF中选择的任何值的数据类型都是string。我需要它是numeric类型。如何在保留帧的整体数据类型的同时保留数据框中的NA值? (我想避免使用as.numeric,因为我希望我的数据框保持两列)

感谢您的帮助和耐心!

2 个答案:

答案 0 :(得分:0)

这样的东西?

CDF <- read.xlsx(wb, sheet=1, startRow=1, cols=c(2,3), colClasses = "numeric")

答案 1 :(得分:0)

要跟进我的评论,我已经为您创建了一个功能:

return_num <- function(dataframe){

    for(i in 1:ncol(dataframe)){

        if(!is.numeric(dataframe[,i])){

            dataframe[,i] = as.numeric(dataframe[,i])
}else{

print(paste(names(dataframe[i]), " is already numeric"))

}
}
}

可以在

之后调用该函数
return_num(CDF)