我目前正在使用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
,因为我希望我的数据框保持两列)
感谢您的帮助和耐心!
答案 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)