【问题标题】:reading .txt file into R, unknown delimiter, no columns将 .txt 文件读入 R,未知分隔符,无列
【发布时间】:2014-06-12 16:07:17
【问题描述】:

我有一个包含在 .txt 文件中的大型数据集,它被分成行,没有列。不幸的是,这些行是按大小写聚集的。有点像这样:

v1(case1): a   
v2(case1): b
v3(case1): c

v1(case2): d
v2(case2): e
v3(case2): f

……等等。我尝试使用 read.table 将变量名称与数据分开,使用以下命令:

data1 <- read.table("Data.txt", header = FALSE, sep = ":", fill=TRUE)

…但它并不完全有效(即,在某些情况下,它将变量名放在“v1”列中,而在某些情况下则没有),导致了这种情况:

V1            V2
1   v1case1   a
2   v2case1   b 
3   v3case1   c
4   v1case2   d
5   v2case2   e
6   v3case2   f
7            v1case3
8            v2case3
9            v3case3

关于更好方法的任何建议 a) 将所有变量名称提取到单独的列中(以便我可以使用它们创建新变量,这些变量将使用“if/”将每个变量的相关数据拉入列中else") 或 b) 将此数据集转换为行/列格式的不同方式?

非常感谢所有建议。

【问题讨论】:

    标签: r


    【解决方案1】:

    stringrplyr 可以在这里提供帮助,如果您以 readLines() 开头:

    library(stringr)
    library(plyr)
    
    dat <- readLines("rows.txt")
    print(dat)
    ## [1] "v1(case1): a" "v2(case1): b" "v3(case1): c" "v1(case2): d" "v2(case2): e" "v3(case2): f"
    
    x <- ldply(str_match_all(dat, "^([[:alnum:]]+)\\(([[:alnum:]]+)\\):\ +([[:alnum:]]+)"))[,2:4]
    print(x)
    ##    2     3 4
    ## 1 v1 case1 a
    ## 2 v2 case1 b
    ## 3 v3 case1 c
    ## 4 v1 case2 d
    ## 5 v2 case2 e
    ## 6 v3 case2 f
    

    我不完全确定您需要什么样的结果数据框,但reshapereshape2 可以帮助您完成剩下的工作。

    【讨论】:

      【解决方案2】:

      仅使用基础 R:

      dat = as.data.frame(scan('Data.txt', sep = ':', 
                          what = list(case = character(), value = character()), 
                          strip.white = TRUE, blank.lines.skip = TRUE))
      

      选项 blank.lines.skip 解决了空行问题。如果需要,您可以使用@hrbrmstr 的建议进一步处理案例名称。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-07
        • 1970-01-01
        • 1970-01-01
        • 2015-10-22
        • 1970-01-01
        相关资源
        最近更新 更多