【问题标题】:Splitting a csv file into multiple txt. files将一个csv文件拆分成多个txt。文件
【发布时间】:2020-06-15 03:01:39
【问题描述】:

我有一个大型 csv 数据集,我想将其拆分为多个 txt 文件。我希望每个文件的名称来自 ID 列,每个文件的内容来自 Text 列。我的数据看起来像这样。

ID      Text
1       I like dogs
2       My name is
3       It is sunny

有人可以提供建议吗?我不介意使用 excel 或 R。 谢谢!

【问题讨论】:

  • 这是否意味着每行一个文件?
  • 是的!所以一个名为“1”的文件的内容是“我喜欢狗”

标签: r excel


【解决方案1】:

在R中,您可以splitID的数据并使用writeLines将其写入文本文件。

如果您的数据框名为df,请尝试:

temp <- split(df$Text, df$ID)
Map(function(x, y) writeLines(x, paste0(y, '.txt')), temp, names(temp))

【讨论】:

  • 感谢您回复我!我收到以下消息“ writeLines(x, paste0(y, ".txt")) 中的错误:只能写入字符对象”
  • @Mai 似乎您有 Text 列作为因素。在运行上述代码之前,你能运行一次df$Text &lt;- as.character(df$Text)吗?
  • 我运行了代码,这次没有收到任何错误信息。但是,在控制台中它只生成一个 ID 和下面为 NULL 的列表。 "1 空,2 空,3 空"
  • 检查您的工作目录,应该有名称为“1.txt”、“2.txt”等的文件。
  • @Mai 很高兴能帮上忙!如果您觉得它对您有用,请随时点击左侧投票按钮旁边的复选标记accept the answer。 :-) 每个帖子只能接受一个答案。
【解决方案2】:

如果您有很多行,这对于并行计算来说是一项很好的任务。 (Here's the general premise: R 花了很多时间格式化文件。写入磁盘不能并行完成,但格式化文件可以。)所以让我们并行执行!

furrr 包是我最喜欢的包之一:简而言之,它为purrr 包增加了并行处理能力,其映射功能非常有用。在这种情况下,我们想使用future_pmap 函数,它允许我们将函数应用于数据帧的每一行。这应该是您需要的所有代码:

library(furrr)
plan(multiprocess)
future_pmap(df, function(id, value) {write(value, paste0(id, ".txt"))})

我在一个有 31,496 行的数据帧上测试了这个函数的并行和普通版本,并行版本只用了 60% 的时间。这种方法也比Ronak Shah's writeLines method快20%左右。

【讨论】:

  • 谢谢!下次我试试看
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-07-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多