r - 加载多个包含逗号或句点作为小数点的 `csv` 文件

标签 r csv

我通常会收到来自欧洲和美国的 csv 文件。来自欧洲的文件有一个逗号,来自美国的文件有一个句点作为小数点。我希望能够将所有这些文件放入一个目录中并使用一个函数加载它们。

最小工作示例:

write.table(data.frame("a" = 1.4, "b" = 2.5),  sep = ",",
        "periodFile1.csv", dec = ".", row.names = FALSE)
write.table(data.frame("c" = 1.4, "d" = 2.5),  sep = ",",
        "periodFile2.csv", dec = ".", row.names = FALSE)

我一直在为每种类型的小数点使用单独的程序。

对于作为小数点的句点,我使用以下内容:

periodNames <-  list.files(pattern = "*.csv")
lapply(seq_along(periodNames),
        function(x) read.csv(periodNames[x], dec = "."))

以下不是我的例行程序的一部分,但对于最小工作示例来说是必需的,否则下一个加载函数会产生错误。

file.remove(c("periodFile1.csv", "periodFile2.csv"))

对于作为小数点的逗号,我使用以下内容:

write.table(data.frame("e" = 2.7, "f" = 4.5), sep = ";", 
        "CommaFile1.csv", dec = ",", row.names = FALSE)
write.table(data.frame("g" = 2.7, "h" = 4.5),  sep = ";", 
        "CommaFile2.csv", dec = ",", row.names = FALSE)
commaNames <-  list.files(pattern = "*.csv")
lapply(seq_along(commaNames),
        function(x) read.csv(commaNames[x], dec = ",", sep = ";"))

我希望能够将所有文件加载到工作区中,而不管小数点的类型。为此,我希望创建一个加载函数来检查小数位的类型并使用适当的加载方法。

提前致谢

最佳答案

我建议使用 readLines 读取每个文件的几行并测试内容以确定正确的分隔符。您必须验证此测试是否适用于您的数据,但我将从一些简单的事情开始,例如查看第一行数据中是否有分号:

grepl(';', line)

然后,使用这个函数读取一个文件

read_csv_file <- function(file_path){
  second_line <- readLines(file_path, n=2)[2]
  if (grepl(';', second_line)){
    return(read.csv(file_path, dec=',', sep=';'))
  }else return(read.csv(file_path))
}

然后这样调用它(我在这里也简化了你的一些代码)

allNames <-  list.files(pattern = "*.csv")
lapply(allNames, read_csv_file)

关于r - 加载多个包含逗号或句点作为小数点的 `csv` 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34189026/

相关文章:

r - 为什么会出现这种情况? R 应用和库函数

R 找到元组的 "groups"

r - 从右到左计算 1 的个数,到第一个 0 为止

python - 包含列子集的 CSV

ruby - 字符串无法写入 CSV 文件 Ruby

javascript - d3.js 数据绑定(bind)需要唯一键来存储 csv 文件中的重复条目

r - 将r基图分配给一个值

使用正则表达式删除父括号

c# - C# 中的 JSON 到 CSV 和 CSV 到 JSON

python - 解析多个大型 XML 文件并写入 CSV