【问题标题】:Character vector to dataframe字符向量到数据框
【发布时间】:2020-08-25 12:27:59
【问题描述】:

我有以下格式的数据。向量的第一个元素指的是标题,向量的第二个到底部指的是针对标题的值。我想将数据放入表格/结构化格式(或带有标题和值的数据框)。

k <- c("Afv.dato : Type Termin lalt Betalt pa termin Terminsbelgb", "13-09-2019 opkrzvning 11-09-2019 4.067,11",
  "18-10-2019 indbetaling 4.067,00 11-09-2019 4.067,00", "11-12-2019 opkrzvning 11-12-2019 9.176,00" ,
  "18-12-2019 indbetaling 9.176,11 11-09-2019 0,11", "11-12-2019 9.176,00", "11-03-2020 opkreevning 11-03-2020 9.176,00", 
  "02-03-2020 indbetaling 9.176,00 11-03-2020 9.176,00", "11-06-2020 opkraevning 11-06-2020 9.176,00",
  "18-05-2020 indbetaling 9,176,00 11-06-2020 9.176,00"         
)

所需输出(前 5 行的值(包括标题)

【问题讨论】:

  • 你希望如何解释"11-12-2019 9.176,00"这一行?
  • 我想知道如何处理列不相等且没有缺失值指示符的数据...

标签: r dataframe


【解决方案1】:

你可以试试strcapture

strcapture("(\\d+-\\d+-\\d+) *(\\D*) *(\\d+-\\d+-\\d+)* *([0-9.,]*) *(\\d+-\\d+-\\d+)* *([0-9.,]*)",
 k[-1], data.frame(Afv.dato=character(), Type=character(), Termin=character(),
 lalt=character(), "Betalt pa termin"=character(), Terminsbelgb=character()))
#    Afv.dato         Type     Termin     lalt Betalt.pa.termin Terminsbelgb
#1 13-09-2019  opkrzvning  11-09-2019 4.067,11                              
#2 18-10-2019 indbetaling             4.067,00       11-09-2019     4.067,00
#3 11-12-2019  opkrzvning  11-12-2019 9.176,00                              
#4 18-12-2019 indbetaling             9.176,11       11-09-2019         0,11
#5 11-12-2019                         9.176,00                              
#6 11-03-2020 opkreevning  11-03-2020 9.176,00                              
#7 02-03-2020 indbetaling             9.176,00       11-03-2020     9.176,00
#8 11-06-2020 opkraevning  11-06-2020 9.176,00                              
#9 18-05-2020 indbetaling             9,176,00       11-06-2020     9.176,00

【讨论】:

    【解决方案2】:

    我会做这样的事情。这个想法是 read_lines() 会将向量的每个元素放在一行中。之后,将此结果提供给通常用于读取平面文件的函数。这些函数一般使用文件的第一行作为列名。

    library(readr) 
    
    k <- c("Afv.dato : Type Termin lalt Betalt pa termin Terminsbelgb", "13-09-2019 opkrzvning 11-09-2019 4.067,11",
           "18-10-2019 indbetaling 4.067,00 11-09-2019 4.067,00", "11-12-2019 opkrzvning 11-12-2019 9.176,00" ,
           "18-12-2019 indbetaling 9.176,11 11-09-2019 0,11", "11-12-2019 9.176,00", "11-03-2020 opkreevning 11-03-2020 9.176,00", 
           "02-03-2020 indbetaling 9.176,00 11-03-2020 9.176,00", "11-06-2020 opkraevning 11-06-2020 9.176,00",
           "18-05-2020 indbetaling 9,176,00 11-06-2020 9.176,00"         
    )
    
    read_csv(read_lines(k))
    

    【讨论】:

    • 如果 OP 的数据被分隔,这将起作用,但他们寻求帮助的问题是需要根据顺序和数据类型确定数据进入哪一列。例如,在预期的输出中看到Termin 列的第二行是空白的,但在示例输入中没有说明这一点。
    • 另外,我不认为read_lines 在这里完成任何事情。 read_lines(k)k 相同。
    猜你喜欢
    • 1970-01-01
    • 2023-01-03
    • 2016-04-13
    • 2018-12-05
    • 2014-04-22
    • 2020-02-26
    • 2017-12-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多