将Excel csv文件导入RStudio&将因子转换为数字,我得到NAs或新数据;尝试消除逗号但仍然获得NAs

时间:2017-01-11 09:58:47

标签: r excel csv rstudio

Excel csv数据文件(称为ff)有54列& 0和0之间的788行标准化数据。 1,看起来像这样: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 ...

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

1 个答案:

答案 0 :(得分:0)

我认为您遇到的一个问题是您在整个数据框上运行as.numeric(as.character(.))调用,而不是特定列。结果是一个向量,其长度等于数据框中的列数(请注意,您的输出是长度为54的向量,而不是像您一样希望来自原始数据框的列的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")),但实际上是表示该列的向量,转换为字符串(即:"c(1, 2, 3)")。因此,当您将as.numeric应用于该向量时,您将获得向量(不是数据帧),并且因为每个元素都无法转换为数字(甚至是数字向量) ,你得到NA的回复:

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

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

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

这样您就可以将矢量转换为矢量,这样可以为您提供后续的结果。您可以使用lapply在每列上执行此操作,例如:

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

(或者更好的是,根据@ s.brunel的评论阅读文件时设置colClasses,这样您就不必担心这种转换了<) / p>

另请注意@ akrun的评论。在转换向量时,您应该期望一个警告,其中某些值无法转换为您想要的类。在您的情况下,您已经获得了一些" - "值,这些值无法转换为数字,因此您将获得NA代替这些值。