使用 R 拆分包含由 headers 分隔的多组数据的 CSV 并创建标识列
Using R to Split a CSV with multiple sets of data separated by headers and creating an identifying column
我是 R 的新手,我遇到了一个奇怪的 CSV,我的老板需要我简化使用。
我有一个包含多组数据的 .csv。通常很好,但每组数据都用空行分隔,然后是下一组数据的 headers(headers 始终相同)。唯一的问题是没有标识列让我只删除这些行。因此,对于每组数据,我需要删除空行和 Headers,同时在新列中为每组数据赋予唯一值。我希望这是有道理的。
老实说,我不知道如何处理这种情况,也找不到任何我可以适应的问题。至少在我目前的知识中不是。
任何帮助将不胜感激,并可能帮助我说服我的老板放弃他的强硬方式...
已编辑,因为我错过了所需的 "set" 列..
如果你的数据如你所说,它来自图片,你也许可以...它对我在 excel 中构建的一个小样本很有效,有点像你的.我假设 "Current" 和 "Desired" 实际上不在文件中并且第一行以 header
开头
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))
我是 R 的新手,我遇到了一个奇怪的 CSV,我的老板需要我简化使用。
我有一个包含多组数据的 .csv。通常很好,但每组数据都用空行分隔,然后是下一组数据的 headers(headers 始终相同)。唯一的问题是没有标识列让我只删除这些行。因此,对于每组数据,我需要删除空行和 Headers,同时在新列中为每组数据赋予唯一值。我希望这是有道理的。
老实说,我不知道如何处理这种情况,也找不到任何我可以适应的问题。至少在我目前的知识中不是。
任何帮助将不胜感激,并可能帮助我说服我的老板放弃他的强硬方式...
已编辑,因为我错过了所需的 "set" 列..
如果你的数据如你所说,它来自图片,你也许可以...它对我在 excel 中构建的一个小样本很有效,有点像你的.我假设 "Current" 和 "Desired" 实际上不在文件中并且第一行以 header
开头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))