【问题标题】:Using R to Split a CSV with multiple sets of data separated by headers and creating an identifying column使用 R 拆分具有由标题分隔的多组数据的 CSV 并创建标识列
【发布时间】:2020-09-23 22:24:46
【问题描述】:

对 R 非常陌生,我遇到了一个奇怪的 CSV,我的老板需要我简化以供使用。

我有一个包含多组数据的 .csv。通常没问题,但每组数据用空行分隔,然后是下一组数据的标题(标题始终相同)。唯一的问题是没有识别列可以让我删除这些行。因此,对于每组数据,我需要删除空行和标题,同时在新列中为每组数据赋予一个唯一值。我希望这是有道理的。

老实说,我不知道如何处理这种情况,也找不到任何可以适应的问题。至少在我目前的知识范围内不会。

任何帮助将不胜感激,并可能帮助我说服我的老板放弃他的曼陀罗方式......

【问题讨论】:

  • 嗨!将数据作为图像共享并不是很有帮助。你能发布一些实际的csv吗?还是使用read.csv后的一些data.frame?另见stackoverflow.com/questions/5963269/…
  • 我的建议是使用readLines() 读取整个文件(如果不是太大)。确定哪些行是空行。然后,您可以在 read.csv 中使用此信息——请参阅 nrowsskip 参数。这些分别告诉您要阅读多少行,以及在阅读之前要跳过多少行。查看 help(read.csv) 以获取有关这些参数的信息。因此,您可以单独读取尽可能多的数据集,最后您可以使用rbind 将它们堆叠起来。在此过程中您需要小心一些事情,但没有更多信息,这是我能做的最好的事情
  • 这个答案有帮助吗? stackoverflow.com/a/61091354/3358272?
  • 您也可以调整它以找到空列。老实说,也许最简单的方法是在 Excel(或类似的)中打开并至少分割并排表格,我之前评论中的 readMultiCSV 函数应该能够拆分除了其余的。
  • @bzki 我明白你的意思,我会解决这个问题。似乎这将是最强大的解决方案。需要使其尽可能用户友好,但希望可以使其适用于所有情况。我今天会玩并尝试像那样工作。感谢您的帮助和观点!

标签: r csv-import


【解决方案1】:

已编辑,因为我错过了所需的“设置”列..

如果您的数据如您所说,它来自图片,您可能能够... 它适用于我在 excel 中构建的一个小样本,该样本有点像你的。我假设“Current”和“Desired”实际上不在文件中,并且第一行以标题开头

library(dplyr)

yourdata <- read.csv("yourcsv.csv")

yourdata %>% 
  mutate(Set = cumsum(!duplicated(Location == "Location"))) %>% 
  filter(Location != "Location", Location != "") 
#>   Location Feature Height Volume Set
#> 1     U104       3    104     99   1
#> 2     U104       5    123    456   1
#> 3     U104       6     45    999   2
#> 4     U105       6     45    999   2

根据数据

structure(list(Location = c("U104", "U104", "", "Location", "U104", 
"U105"), Feature = c("3", "5", "", "Feature", "6", "6"), Height = c("104", 
"123", "", "Height", "45", "45"), Volume = c("99", "456", "", 
"Volume", "999", "999")), class = "data.frame", row.names = c(NA, 
-6L))

【讨论】:

  • 干杯!下次我会尝试提出一个更好的问题,但很高兴你至少能理解它。唯一的问题是填充中的位置不太可能相同,但我确实认为我可以让它适用于 90% 的 CSV 并且我们使用的数据的性质(焊膏检查)非常确定我知道识别 PCB 上的阵列的另一个非常有用的方面。
  • 很高兴这对您有帮助,如果您需要,可以提供更多问题和更好的示例数据。 dput 甚至只是 csv 文件的 sn-p 都非常有用
猜你喜欢
  • 2013-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-10
  • 2015-12-06
  • 2020-11-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多