【问题标题】:Combining CSV files and splitting the column into 2 columns using R组合 CSV 文件并使用 R 将列拆分为 2 列
【发布时间】:2016-08-18 15:09:30
【问题描述】:

我有 40 个 CSV 文件,每个文件只有 1 列。我想将所有 40 个文件数据合并到 1 个 CSV 文件中,其中包含 2 列。

数据格式是这样的:

我想通过spacesplit 这个专栏并将所有 40 个 CSV 文件合并为一个文件。我也想preserve the number format

我尝试了下面的代码,但数字格式不固定,并且为 Negative 数字添加了额外的第三列。不知道为什么。

我的代码:

 filenames <- list.files(path="C://R files", full.names=TRUE)

 merged <- data.frame(do.call("rbind", lapply(filenames, read.csv, header = FALSE)))

 data <- do.call("rbind", strsplit(as.character(trimws(merged$V1))," ",fixed=FALSE))

 write.csv(data, "export1.csv", row.names=FALSE, na="NA")
我得到的

T他的输出如下所示。如果您观察到,负数将被放入额外的列中。我只想按空格分割,并按照输入中的确切数字格式放入 2 列。

R 输出

【问题讨论】:

  • 我没有对您投反对票,但我认为您的问题可能出在 Excel 上,而不是您的 R 代码上。
  • 谢谢@Tim。数字格式可能与 Excel 有关,但不确定是否拆分为 3 列。拆分由 R 完成。我验证了输入数据,它没有任何多余的空格。我认为我的程序在拆分时做错了。
  • @Xizam 用 R 输出更新了我的问题。谢谢。
  • 尝试用“\t”分割?

标签: r csv statistics


【解决方案1】:

问题是源数据由以下分隔:

  • 第二个数字为负数时加一个空格,并且
  • 当第二个数字为正数时有两个空格(空格代表不存在的减号)。

诀窍是将字符串拆分为一个或多个个空格:

 data <- do.call("rbind", strsplit(as.character(trimws(merged$V1))," +",fixed=FALSE))

我对字符集、不可靠的文件等有点强迫症,所以我倾向于使用分隔符,例如 "[[:space:]]+",因为它会捕获空格变量而不是空格 " " 或制表符 "\t" .

(在正则表达式中,+ 表示“一个或多个”。其他修饰符包括 ? 为零或一,* 为零或多个。)

【讨论】:

    猜你喜欢
    • 2014-09-04
    • 2018-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多