【问题标题】:Extract IDs from Text in many columns从多列文本中提取 ID
【发布时间】:2019-06-24 06:43:26
【问题描述】:

我有一个巨大的 df,它由不同的符号(#、空格、、)分隔。 读取数据后,我有尚未分离的列。 我尝试使用tidyr::separate 来分隔列。 但由于我有很多列,因此分离的结果会覆盖下一列。

我尝试使用 ''tidyr::separate'' 来分隔列。 但由于我有很多列,因此分离的结果会覆盖下一列。

一列的内容如下所示: Markt#ID=3002349#X=8612088#Y=50228881#RI=1|&RD=10062019&RT=6:46&L=1543&SM=0#1#2&CT=-1#-1#-1#-1#-1&P1=1111111111111111&O1=99999999&T1=99999999&F=-1&RF=1999991999999999111090999999&GP=FF=cost=-1|minDist=0|maxDist=2000|speed=100|routingType=1|ellipseRadius=1000|maxDur=120|waitTime=-1|linDistRouting=0|#BF=cost=-1|minDist=0|maxDist=2000|speed=100|routingType=1|ellipseRadius=1000|maxDur=120|waitTime=-1|linDistRouting=0|#&

总而言之,我有 12 列我想从中提取 IDscoordinates

预期结果:

 ID       X         Y
 3002349  8612088  50228881

【问题讨论】:

    标签: r dplyr extract tidyr separator


    【解决方案1】:

    如果所有行的格式相同,您可以使用tidyr::extract

    tidyr::extract(df, v1, c("ID", "X", "Y"), regex = ".*ID=(\\d+)#X=(\\d+)#Y=(\\d+)")
    #       ID       X        Y
    #1 3002349 8612088 50228881
    

    这会从文本中提取后跟IDXY 标签的数字。

    数据

    x <- "Markt#ID=3002349#X=8612088#Y=50228881#RI=1|&RD=10062019&RT=6:46&L=1543&SM=0#1#2&CT=-1#-1#-1#-1#-1&P1=1111111111111111&O1=99999999&T1=99999999&F=-1&RF=1999991999999999111090999999&GP=FF=cost=-1|minDist=0|maxDist=2000|speed=100|routingType=1|ellipseRadius=1000|maxDur=120|waitTime=-1|linDistRouting=0|#BF=cost=-1|minDist=0|maxDist=2000|speed=100|routingType=1|ellipseRadius=1000|maxDur=120|waitTime=-1|linDistRouting=0|#&"
    df <- data.frame(v1 = x)
    

    【讨论】:

      【解决方案2】:

      我们可以在base R 中使用read.csvsub 执行此操作

      read.csv(text= sub(".*ID=(\\d+)#X=(\\d+)#Y=(\\d+).*", "\\1,\\2,\\3", 
                 df$v1), header = FALSE, col.names = c("ID", "X", "Y"))
      #     ID       X        Y
      #1 3002349 8612088 50228881
      

      数据

      df <- structure(list(v1 = structure(1L, .Label = "Markt#ID=3002349#X=8612088#Y=50228881#RI=1|&RD=10062019&RT=6:46&L=1543&SM=0#1#2&CT=-1#-1#-1#-1#-1&P1=1111111111111111&O1=99999999&T1=99999999&F=-1&RF=1999991999999999111090999999&GP=FF=cost=-1|minDist=0|maxDist=2000|speed=100|routingType=1|ellipseRadius=1000|maxDur=120|waitTime=-1|linDistRouting=0|#BF=cost=-1|minDist=0|maxDist=2000|speed=100|routingType=1|ellipseRadius=1000|maxDur=120|waitTime=-1|linDistRouting=0|#&", class = "factor")), class = "data.frame", row.names = c(NA, 
      -1L))
      

      【讨论】:

        猜你喜欢
        • 2018-08-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-08-10
        • 2012-06-09
        • 2012-05-12
        • 1970-01-01
        相关资源
        最近更新 更多