r中数据帧的文本处理

时间:2018-03-25 04:45:20

标签: r

我有一个存储数据的文本文件存储如下:

{{2,3,4},{1,3},{4},{1,2} .....}

我想删除括号并将其转换为两种列格式,其中第一列是括号,后跟术语

1 2
1 3
1 4
2 1
2 3
3 4
4 1
4 2

到目前为止,我已阅读文件

tab <- read.table("test.txt",header=FALSE,sep="}")

这给出了一个数据帧

      V1      V2   V3    V4
1 {{2,3,4  {1,3   {4   {1,2  .....

如何进行?

2 个答案:

答案 0 :(得分:1)

我们使用readLines阅读,然后将{}strsplit一起删除,并将其转换为带索引的两列数据框,并重新整形为“长”字样。格式为separate_rows

library(tidyverse)
v1 <- setdiff(unlist(strsplit(lines, "[{}]")), c("", ","))
tibble(index = seq_along(v1), Col = v1) %>%
       separate_rows(Col, convert = TRUE)
# A tibble: 8 x 2
#  index   Col
#  <int> <int>
#1     1     2
#2     1     3
#3     1     4
#4     2     1
#5     2     3
#6     3     4
#7     4     1
#8     4     2

base R方法将,替换为}之后的另一个分隔符,将,分割为liststack它到两列data.frame

v1 <- scan(text=gsub("[{}]", "", gsub("},", ";", lines)), what = "", sep=";", quiet = TRUE)
stack(setNames(lapply(strsplit(v1, ","), as.integer), seq_along(v1)))[2:1]

数据

lines <- readLines(textConnection("{{2,3,4},{1,3},{4},{1,2}}"))
#reading from file
lines <- readLines("yourfile.txt")

答案 1 :(得分:1)

数据:

tab <- read.table(text='     V1      V2   V3    V4
1 {{2,3,4  {1,3   {4   {1,2 
2 {{2,3,4  {1,3   {4   {1,2 ')

代码:使用gsub,删除{并将字符串拆分为,,然后创建数据框。列名称已删除。最后,使用df1

rbindlist中的数据框列表合并在一起
df1 <- lapply( seq_along(tab), function(x)  {
  temp <- data.frame( x, strsplit( gsub( "{", "", tab[[x]], fixed = TRUE ), split = "," ),
                      stringsAsFactors = FALSE)
  colnames(temp) <- NULL
  temp
} )

<强>输出:

data.table::rbindlist(df1)
#    V1 V2 V3
# 1:  1  2  2
# 2:  1  3  3
# 3:  1  4  4
# 4:  2  1  1
# 5:  2  3  3
# 6:  3  4  4
# 7:  4  1  1
# 8:  4  2  2