将Excel csv文件导入RStudio并将因子转换为数字,我得到了NAs或新的数据; 试图消除逗号,但仍然得到新加坡

Excel csv数据文件(称为ff)在0和1之间有54列和788行标准化数据,如下所示:0.39 0.16 0.27 0.60 …

> str(ff) 'data.frame': 788 obs. of 54 variables: $ V1 : Factor w/ 66 levels " - "," 0.05 ",..: 25 36 33 44 36 37 39 20 > dd <- as.numeric(as.character(ff)) Warning message: NAs introduced by coercion > dd <- gsub(".","",ff) > de <- as.numeric(as.character(dd)) > str(de) num [1:54] NA NA NA NA NA NA NA NA NA NA ... 

我不知所措 我看到很多人(也许是像我这样的初学者)发布了类似的问题,请接受我再次提出这个问题的道歉。 提前感谢您的build议。

我认为你遇到的一个问题是你正在整个数据框上运行as.numeric(as.character(.))调用,而不是特定的列。 结果是一个vector,其长度等于你的数据框中的列数(注意你的输出是一个长度为54的vector,而不是788像你希望从原始数据框的一列中那样)。 原因如下:

将数据框转换为字符时,会返回一个向量:

 df <- data.frame( V1 = c(1,2,3), V2 = c(4,5,6) ) as.character( df ) [1] "c(1, 2, 3)" "c(4, 5, 6)" 

请注意,每个向量元素不是一个字符向量(即: c("1","2","3") ),但实际上是表示该列的向量,转换为string(即: "c(1, 2, 3)" )。 所以,当你向这个向量应用as.numeric时,你会得到一个向量(不是数据框),并且由于每个元素都不能被转换成一个数字(甚至是一个数字向量) :

 as.numeric( as.character( df ) ) [1] NA NA 

您更可能寻找的是单列转换,而不是整个数据框。 尝试:

 ff$V1 <- as.numeric( as.character( ff$V1 ) ) 

这样你就可以将一个vector转换成一个vector,这个vector应该给你以后的结果。 你可以使用lapply在每一列执行此lapply ,例如:

 df <- lapply( df, function(x) as.numeric( as.character( x ) ) ) df <- as.data.frame( df ) 

(或者更好的是,当您按照@ s.brunel的注释来读取文件时设置colClasses ,这样您根本不必担心这个转换)

还请注意@ akrun的评论。 在转换vector的时候,你应该会有一个警告,其中一些值不能转换成你想要的类。 在你的情况下,你有一些" - "值,不能转换为数字,所以你会得到NA的地方。