每行重复列名的文件格式

数据挖掘 数据清理 CSV
2022-02-13 11:04:57

我收到了文本文件中的数据集,格式如下

col1=datac1r1,col2=datac2r1,col3=datac3r1
col1=datac1r2,col2=datac2r2,col3=datac3r2
col1=datac1r3,col2=datac2r3,col3=datac3r3
col1=datac1r4,col2=datac2r4,col3=datac3r4

每一行都是一个唯一的条目,列用逗号分隔,只是列名在每个元素中重复。

我需要在 R 中解析它并分析它。我已经广泛使用 csv 文件,但我以前从未见过这种格式。

是标准病吗?我可以导入的格式吗?还是我需要编写脚本将其转换为 csv 格式?

2个回答

使用米勒(https://github.com/johnkerl/miller

mlr --ocsv unsparsify input.txt

您将拥有此 CSV

col1,col2,col3
datac1r1,datac2r1,datac3r1
datac1r2,datac2r2,datac3r2
datac1r3,datac2r3,datac3r3
datac1r4,datac2r4,datac3r4

在一个完美的世界中,米勒包(Aborruso 的回答)会做到这一点。但是,我还需要清理数据集。我编写了以下函数来完成这一切。关键部分是 extract_header() 和 remove_header() 函数。

clean_dataset <- function(dataset) {
  #Convert all elements into character (for now)
  dataset[] = lapply(dataset, as.character)

  #Come up with header
  extract_header = function(x) {
    strsplit(x,"=")[[1]][1]
  }

  names(dataset) = lapply(dataset[1,], extract_header)

  #Remove headers from all elements
  remove_header = function(x) {
    strsplit(x,"=")[[1]][2]
  }

  dataset = as.data.frame(apply(dataset, MARGIN=c(1,2), remove_header))
  dataset[!is.na(names(dataset))]
}

dataset <- clean_dataset(dataset)