【问题标题】:read wrapped text with read.table()使用 read.table() 读取换行的文本
【发布时间】:2014-08-22 14:40:15
【问题描述】:

我有从另一个程序输出的包含 25 个变量的数据。对于大多数情况(行),另一个程序将第 24 个和第 25 个变量的文本包装到下面的行,如下所示:

v1  v2  v3  v4  v5  v6  v7  v8  v9  v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23
v24 v25

在其他情况下,只有第 25 个变量被包裹在下面,像这样:

v1  v2  v3  v4  v5  v6  v7  v8  v9  v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23
v25

有没有办法将制表符分隔的文件读入 R,以便每隔一行抓取最后两个变量并根据需要添加到第 24 列和第 25 列,这样结果将是一个具有 25 个唯一值的对象变量?

我认为这可能与使用 read.table() 中的跳过选项有关。

【问题讨论】:

    标签: r word-wrap read.table


    【解决方案1】:

    这是一种方法。我将 scan 与 text 参数一起用于演示目的,但您需要提供文件的路径。

    x <- c("v1  v2  v3  v4  v5  v6  v7  v8  v9  v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23",
    "v24 v25", 
    "v1  v2  v3  v4  v5  v6  v7  v8  v9  v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23",
    "v24 v25")
    
    values <- scan(text=x, what='')
    do.call(rbind, split(values, rep(1:(length(values) %/% 25), each=25)))
    

    【讨论】:

      【解决方案2】:

      您也可以尝试:(使用来自@Matthew Plourde 的x

      library(stringr)
      indx <- str_count(str_trim(x), " ")==1 #str_trim(x) in case there are leading, trailing spaces, remove it
      read.table(text=paste(x[!indx], x[indx]),sep="")
      #   V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11 V12 V13 V14 V15 V16 V17 V18 V19 V20 V21
      #1 v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21
      #2 v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21
      #  V22 V23 V24 V25
      #1 v22 v23 v24 v25
      #2 v22 v23 v24 v25
      

      万一,变量之间的空格不是常数,例如

       x1 <- c("v1  v2  v3  v4  v5  v6  v7  v8  v9  v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23",
       "v24     v25", 
       "v1  v2  v3  v4  v5  v6  v7  v8  v9  v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23",
       "v24  v25")
      
      
        x1 <- gsub("(?<=[A-Za-z0-9])\\s+(?=[A-Za-z0-9])", " ", x1, perl=TRUE)
        indx <- str_count(str_trim(x1), " ")==1 
        read.table(text=paste(x1[!indx], x1[indx]),sep="")
      

      【讨论】:

        猜你喜欢
        • 2010-11-27
        • 2017-03-11
        • 1970-01-01
        • 2014-03-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-08-12
        相关资源
        最近更新 更多