更新
使用read.csv
阅读csv时,我需要将NA
,""
,NaN
和NULL
的数字列读入data.frame
1}}作为数字。问题是这些案例中的一些转换为字符。另外,我需要删除任何没有完整案例的行
示例数据集:
df1 <- read.csv(text="
+ cat ,vala , valb, valc, vald, vale
+ only_valid_row, 1, 1.00000000000002e3, 1.99999999999999999e-2, 2e3, 3
+ a , '' , 12 , 13 , 2.1 , 10
+ b , 2e-3, NA , 1.1 , 1.11, 8
+ c , 3e2 , 2.1 , NaN , 3 , 7.1
+ d , 2 , 1e2 , 0.3 , , 0.1
+ e , 3 , 1e2 , 3.14, 6 , NULL
+ ", stringsAsFactors=FALSE,na.strings=c('NA','NaN','NULL'),quote='\'',strip.white=TRUE)
sapply(df1,class)
cat vala valb valc vald vale
#"character" "numeric" "numeric" "character" "numeric" "numeric"
(df2 <- df1[complete.cases(df1),])
cat vala valb valc vald vale
#1 only_valid_row 1 1000 1.99999999999999999e-2 2000 3
sapply(df2,class)
# cat vala valb valc vald vale
#"character" "numeric" "numeric" "character" "numeric" "numeric"
感谢您之前的答案,但似乎问题的根源是小数点后的有效位数(请参阅上面的valc
)。有什么建议?
答案 0 :(得分:1)
这是一个类似于你的解决方案。假设只有第一列是字符,其余列是您尝试转换的数字。我将所有列转换为数值,将“”,NaN和Null强制为NA,可以使用complete.cases函数轻松删除:
df1 <- read.csv(text="
cat ,vala , valb, valc, vald, vale
only_valid_row, 1, 1e3, 2, 2e3, 3
a , '' , 12 , 13 , 2.1 , 10
b , 2e-3, NA , 1.1 , 1.11, 8
c , 3e2 , 2.1 , NaN , 3 , 7.1
d , 2 , 1e2 , 0.3 , , 0.1
e , 3 , 1e2 , 3.14, 6 , NULL
", stringsAsFactors=FALSE)
#convert to numeruic and construct new dataframe
converted<-apply(df1[,-1], 2, function(x) {as.numeric(as.character(x))})
newdf<-data.frame(df1[1], converted)
#return complete cases
newdf<-newdf[complete.cases(newdf),]