解析R中的文件

时间:2018-10-23 23:59:31

标签: r parsing

我需要解析R中的文件,如下所示:

Acc1    "product"="A","product"="B","product"="C"
Acc2    "product"="C","product"="D"

上面是一个txt文件,Acc1和“产品”之间有一个制表符。

输出应如下所示:

Column1 Column2
Acc1    A
Acc1    B
Acc1    C
Acc2    C
Acc2    D

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

我建议您为此考虑一个整洁的解决方案。当然,可以使用base-R和data.table处理它(就像其他人可能在评论或答案中建议的那样),但这是一个好的开始。

首先,伪造数据。

txt <- readLines(textConnection('Acc1    "product"="A A","product"="B","product"="C"
Acc2    "product"="C","product"="D"'))

就您而言,您可能只愿意readLines(filename)

下一个代码块将“ Acc”内容与其余内容分开。

txtsplit <- strsplit(gsub("^(\\S+)\\s+", "\\1|", txt), "\\|")

最后,其余的处理。

library(dplyr)
library(tidyr)
data_frame(
  Col1 = sapply(txtsplit, `[[`, 1),
  Col2 = sapply(txtsplit, `[[`, 2)
) %>%
  mutate(
    Col2 = gsub('"product"=', '', Col2),
    Col2 = strsplit(Col2, ",")
  ) %>%
  unnest() %>%
  mutate(
    Col2 = gsub('"', '', Col2)
  )
# # A tibble: 5 x 2
#   Col1  Col2 
#   <chr> <chr>
# 1 Acc1  A A
# 2 Acc1  B    
# 3 Acc1  C    
# 4 Acc2  C    
# 5 Acc2  D    

关于使用dplyrtidyr的一些很好的教程,快速搜索将发现比我在这里发布的更好/更新的内容。

顺便说一句:我将引号的删除分隔到单独的mutate中,但是可以很容易地在开头的gsub中进行处理。我选择将其分开,以防引号中包含多个字母,如果将其删除可能会在以后引起解析问题。