【问题标题】:read textfile as formatted list将文本文件读取为格式化列表
【发布时间】:2021-03-25 05:56:17
【问题描述】:

我想将一个文本文件作为列表导入 R,但不知道如何告诉 R 所需的格式。源列表为txt文件,格式如下:

Column1=a
Date=21.01.2020
Column2=1|2|3
Subtable_Column1=a|2|3
Subtable_Column2=c|d|e

[2]
Column1=b
Date=21.02.2020
Column2=1|2|4
Subtable_Column1=a|2|3
Subtable_Column2=c|d|e
Subtable_Column3=c|d|e

最后,每个[n] 应该是包含命名向量的列表索引(例如第 1 列、日期等)
在 R 中怎么可能?

感谢您的帮助!

【问题讨论】:

    标签: r arrays list txt


    【解决方案1】:

    这是一种预先格式化数据的方法。

    varval.dat

    Column1=a
    Date=21.01.2020
    Column2=1|2|3
    Subtable_Column1=a|2|3
    Subtable_Column2=c|d|e
    
    [2]
    Column1=b
    Date=21.02.2020
    Column2=1|2|4
    Subtable_Column1=a|2|3
    Subtable_Column2=c|d|e
    Subtable_Column3=c|d|e
    

    它将每个数据集放入数据框的一行中:

    awk -F '=' 'BEGIN{i=1}
    !NF{i++; j=0; next}
    /=/{ j++; cname[0,j]=$1; content[i,j]=$2; rows=i; cols[i]++ }
    END{ m=0; for(k in cols){ if(cols[k]>m){ m=cols[k] } };
      for(j=1;j<m;j++){ printf("%s,",cname[0,j]) }; print cname[0,m];
      for(i=1;i<=rows;i++){
        for(j=1;j<m;j++){
          printf("%s,",content[i,j]) } print content[i,m] } }' varval.dat > varval.csv
    

    R:

    a <- read.csv("varval.csv", na.strings="")
    #   Column1       Date Column2 Subtable_Column1 Subtable_Column2 Subtable_Column3
    # 1       a 21.01.2020   1|2|3            a|2|3            c|d|e             <NA>
    # 2       b 21.02.2020   1|2|4            a|2|3            c|d|e            c|d|e
    

    我确定这不是您想要的,但可以作为一个起点。

    【讨论】:

    • 谢谢!但是,我想在一个闪亮的应用程序中使用我的代码,每十分钟重新加载一次 df,所以我宁愿只使用 R。你有推荐吗?
    • 如果输出有用,可以进行系统调用并从 R 中收集结果。纯 R 解决方案可能使用 readline 加载数据,然后使用 gsub 和正则表达式对其进行格式化。但这需要更多的修补和对整个工作流程的清晰理解。
    猜你喜欢
    • 1970-01-01
    • 2010-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-06
    • 2013-08-03
    相关资源
    最近更新 更多