【问题标题】:R: Spread long single column dataframe into two columns, spliting by alpha and numeric, ignoring punctuationR:将长单列数据帧分成两列,按字母和数字拆分,忽略标点符号
【发布时间】:2020-10-26 20:57:47
【问题描述】:

我有一个包含关键字的大型数据集,最后是一个值。我已经设法从 pdf 格式读取数据,并留下如下数据:

  myData <- c("adjuster", "7", "hours", "rate", "oct 2 - 16," , "19", "hours", "rate", "_NA_NA_NA_NA_", "total", "gross", "pay", "6500", "_NA_NA_NA_table",  "NA_copy", "of", "9.16.19 to 9.30.19.xlsx_NA")

myDataDF <- as.data.frame(myData)

我的目标是将单列字符数据“展开”成两列,一列用于字母值,第二列用于下面的数值。我想引入标点符号,但忽略它作为将关键字与值分开的一种方法,因为某些数值具有标点符号。我想折叠(用空格)关键字,直到找到一个数值,然后将其放置在值列中。

我已经尝试了很多不同格式的数据(长字符串和字符串拆分),但这种格式似乎最有利于和干净地让我达到最终目标(让数据实际分析和执行计算) .我只是不知道如何限定继续崩溃,直到你在 R 中达到一个数字。

最终,如果看起来像这样就好了:

+==========================================+============================+
|                 keyword                  |           value            |
+==========================================+============================+
| adjuster                                 | 7                          |
+------------------------------------------+----------------------------+
| hours rate oct 2 - 16                    | 19                         |
+------------------------------------------+----------------------------+
| hours rate _NA_NA_NA_NA_ total gross pay | 6500                       |
+------------------------------------------+----------------------------+
| _NA_NA_NA_table NA_copy of               | 9.16.19 to 9.30.19.xlsx_NA |
+------------------------------------------+----------------------------+

【问题讨论】:

    标签: r regex string alphanumeric spread


    【解决方案1】:

    最后一行模式不是很清楚。根据数据,我们可以通过仅检测“myData”列中的数值或“xlsx”来创建一个分组列,然后通过paste检测除last之外的值和第二列作为summarise last

    library(dplyr)
    library(stringr)
    myDataDF %>% 
         group_by(grp = lag(cumsum(str_detect(myData, '^\\d+$|xlsx')), 
              default = 0)) %>% 
         summarise(keyword = str_c(myData[-n()], collapse = ' '), 
                   value = last(myData), .groups = 'drop') %>% 
         select(-grp)
    

    -输出

    # A tibble: 4 x 2
    #  keyword                                  value                     
    #  <chr>                                    <chr>                     
    #1 adjuster                                 7                         
    #2 hours rate oct 2 - 16,                   19                        
    #3 hours rate _NA_NA_NA_NA_ total gross pay 6500                      
    #4 _NA_NA_NA_table NA_copy of               9.16.19 to 9.30.19.xlsx_NA
    

    【讨论】:

    • 谢谢你,这让我半途而废,但让我澄清一下。值列应填充以数字开头的任何字符串。关键字字段应该是任何以字母字符开头的字符串。
    • @Scottieie 在这种情况下,group_by 模式将只是 ^\\d+
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-18
    • 2018-01-22
    • 1970-01-01
    • 2014-05-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多