【问题标题】:R - split file from gnuplot into 2 partsR - 将文件从 gnuplot 拆分为 2 部分
【发布时间】:2014-10-23 15:08:10
【问题描述】:

我正在尝试修改最初用于 gnuplot 的数据。数据如下所示:

1 2 3 4 5
6 7 8 9 10



1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 1.10 1.11
2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9 2.10 2.11
3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 3.9 3.10 3.11
1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 1.10 1.11
2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9 2.10 2.11
3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 3.9 3.10 3.11

1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 1.10 1.11
2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9 2.10 2.11
3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 3.9 3.10 3.11
1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 1.10 1.11
2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9 2.10 2.11
3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 3.9 3.10 3.11

1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 1.10 1.11
2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9 2.10 2.11
3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 3.9 3.10 3.11
1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 1.10 1.11
2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9 2.10 2.11
3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 3.9 3.10 3.11

我只想阅读包含 11 列的第二部分。 Gnuplot 通过指示 ind 0 或 ind 1 以一种聪明的方式完成它。 知道如何在 R 中拆分文件吗?

【问题讨论】:

  • 如果您知道要跳过多少行,请使用read.tableskip 参数。否则,您可以使用 readLines 并过滤长度为 11 的结果。
  • 实际上对于不同的文件,要跳过的行数不同。
  • @Wiolos,然后您可以将那些不同的skip 数字放入一个列表中,并将lapply(skips, ...)read.table 放在一起。

标签: r filesplitting


【解决方案1】:

scan() 是一种选择

txt = "1 2 3 4 5
6 7 8 9 10



1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 1.10 1.11
2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9 2.10 2.11
3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 3.9 3.10 3.11
1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 1.10 1.11
2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9 2.10 2.11
3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 3.9 3.10 3.11

1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 1.10 1.11
2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9 2.10 2.11
3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 3.9 3.10 3.11
1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 1.10 1.11
2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9 2.10 2.11
3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 3.9 3.10 3.11

1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 1.10 1.11
2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9 2.10 2.11
3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 3.9 3.10 3.11
1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 1.10 1.11
2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9 2.10 2.11
3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 3.9 3.10 3.11"

tc = textConnection(txt)
d = scan(tc, blank.lines.skip = FALSE)
close(tc)
nas = which(is.na(d)) # delimiters
d = d[-unique(c(seq.int(nas[1]), nas))] # remove NAs and first items
matrix(d, ncol=11, byrow=TRUE)

【讨论】:

    【解决方案2】:

    你也可以试试:

     lines <- readLines(n=25)
     1 2 3 4 5
     6 7 8 9 10
    
    
    
     1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 1.10 1.11
     2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9 2.10 2.11
     3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 3.9 3.10 3.11
     1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 1.10 1.11
     2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9 2.10 2.11
     3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 3.9 3.10 3.11
    
     1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 1.10 1.11
     2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9 2.10 2.11
     3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 3.9 3.10 3.11
     1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 1.10 1.11
     2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9 2.10 2.11
     3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 3.9 3.10 3.11
    
     1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 1.10 1.11
     2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9 2.10 2.11
     3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 3.9 3.10 3.11
     1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 1.10 1.11
     2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9 2.10 2.11
     3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 3.9 3.10 3.11
    
     library(stringr)
     d1 <- read.table(text=lines[str_count(lines, "\\s+")==10], sep="", header=F)
     dim(d1)
    #[1] 18 11
    

    【讨论】:

      猜你喜欢
      • 2013-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-12
      相关资源
      最近更新 更多