【问题标题】:R read a txt file write specific column to new txt fileR读取一个txt文件将特定列写入新的txt文件
【发布时间】:2014-02-23 16:46:58
【问题描述】:

我需要读取一个包含 3 列的文件“001.txt”,并导出一个新名称为“new001C2.txt”且仅包含第二列的文件。我可以一次一个文件地做这种事情,但我才刚刚开始,还没有找到一种自动化的方法来为目录中的所有文件做这件事。

【问题讨论】:

  • 分享你的代码用一个文件来做,我们可以帮你把它变成一个函数,应用到一个目录下的所有文件。
  • 谢谢 shujaa。这是我可以对一个文件执行的操作: X

标签: r loops


【解决方案1】:

这可以通过lapply 完成。首先,列出所有文件名。然后用lapply 阅读它们。这会将每个文件放入一个列表中,因此“001.txt”将是列表的第一个成员,并且可以使用readAll[[1]] 访问。 newFiles 创建一个新文件列表,使数字与原始文件名保持一致。然后我们再次使用lapply 将每个写入一个单独的文件。

files <- c("001.txt", "002.txt", "003.txt")

readAll <- lapply(files, read.csv) 

col2 <- lapply(readAll, function(x) x[,2])

newFiles <- paste0("new", gsub(".txt", "", files), "C2.txt")

lapply(1:length(col2), function(i) write(col2[[i]], newFiles[i]))

【讨论】:

  • 感谢 RScriv。我不确定为什么它不起作用:lapply 中的错误(文件,read.csv)[,2]:维度数不正确
  • 很抱歉。我认为它现在已修复。
  • 感谢 RScriv。最后一题。新名称必须保留旧文件名中的数字,不幸的是,这些是主题 ID,数字之间有间隙。例如,如果第一个主题是 005.txt,他在列表中是第一个,所以他的新文件是 new001C2 而不是 new005C2。感谢您的帮助!
  • 只要files 列表中的名称是“005.txt”等应该没问题。文件名没有被使用,但它们被索引。 1:length(files) 是(在这种情况下)1 到 3。所以新文件名应该是“new001C2.txt”、“new002C2.txt”、“new003C2.txt”
  • 我明白了。所以我基本上必须将 new001 与 005 匹配,new002 与 028 等匹配。我可以做到这一点,但如果有一种简单的方法可以在新文件名中使用旧文件名,那就太好了,我有数百个主题.
【解决方案2】:

如果您使用的是基于 linux 的系统,这里有一个更简单的解决方案,您可以直接从 shell 运行:

cut -f 2 001.txt > new001C2.txt

【讨论】:

    猜你喜欢
    • 2021-02-06
    • 2023-04-07
    • 1970-01-01
    • 2016-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-29
    • 2015-05-29
    相关资源
    最近更新 更多