将csv文件导入R - 读取为字符的数值

use*_*259 31 r

我知道在这个网站上有类似的问题,但是,他们似乎都没有充分回答我的问题.

这是我到目前为止所做的:

我有一个csv文件,我在excel中打开.我以代数方式操纵列以获得新的列"A".我将文件导入R使用read.csv(),并将A列中的条目存储为因子 - 我希望它们存储为数字.我在这个主题上找到了这个问题:

将csv-dataset导入R但值变为因子

根据建议,我stringsAsFactors = FALSE作为参数包含read.csv(),但是,正如Hong Ooi在上面链接的页面中建议的那样,这不会导致A列中的条目存储为数值.

可能的解决方案是使用以下页面中给出的建议:

如何在不丢失信息的情况下将因子转换为整数\数字?

但是,我想要一个更清晰的解决方案,即导入文件的方法,以便列条目的条目存储为数值.

欢呼任何帮助!

Ric*_*rta 33

无论你在Excel中用什么代数来创建新列,都可以在R中更有效地完成.

请尝试以下操作:将原始文件(在任何excel操作之前)读入R中read.csv(... stringsAsFactors=FALSE).[如果这不起作用,请看一下?read.table(read.csv包装),但可能还有其他一些潜在的问题].

例如:

   delim = ","  # or is it "\t" ?
   dec = "."    # or is it "," ?
   myDataFrame <- read.csv("path/to/file.csv", header=TRUE, sep=delim, dec=dec, stringsAsFactors=FALSE)
Run Code Online (Sandbox Code Playgroud)

然后,假设您的数字列是第4列

   myDataFrame[, 4]  <- as.numeric(myDataFrame[, 4])  # you can also refer to the column by "itsName"
Run Code Online (Sandbox Code Playgroud)


最后,如果你需要任何帮助来完成你在Excel中完成的相同任务,那么有很多人愿意帮助你

  • 谢谢.这是一个非常有用的清单.在这种情况下,通过在R中进行代数操作而不是Excel来解决问题. (2认同)

NC *_*Jim 13

read.table(及其亲属)中,它是na.strings指定哪些字符串被解释为缺失值的参数NA.默认值为na.strings = "NA"

如果否则数值变量列中的缺失值被编码为除" NA" 之外的其他内容,例如" ."或" N/A",则这些行将被解释为character,然后将整个列转换为character.

因此,如果您的缺失值不是" NA",则需要指定它们na.strings.


小智 5

如果您要处理大型数据集(即,具有大量列的数据集),则上述解决方案可能会很麻烦,并且需要先知道哪些列是数字

试试这个吧。

char_data <- read.csv(input_filename, stringsAsFactors = F)
num_data <- data.frame(data.matrix(char_data))
numeric_columns <- sapply(num_data,function(x){mean(as.numeric(is.na(x)))<0.5})
final_data <- data.frame(num_data[,numeric_columns], char_data[,!numeric_columns])
Run Code Online (Sandbox Code Playgroud)

该代码执行以下操作:

  1. 将数据导入为字符列。
  2. 创建数据实例作为数字列。
  3. 标识数据中的哪些列为数字(假设将数据转换为数字时,NA小于50%的列的确为数字)。
  4. 将数字和字符列合并到最终数据集中。

通过保留原始列的数据类型(如字符和数字),这实际上可以自动导入.csv文件。