使用 tidyverse 函数根据 R 中的字符串模式分隔列?

问题描述 投票:0回答:1

我想从给定的下表数据创建两列。我希望第一列(例如 ID1)包含第一个“-”之前从左到右的所有字母或数字,第二列(ID2)包含从右到左开始第一个“-”之前的第一个字母或数字并将它们打印为字符。问题是我确实知道如何处理单元格上的多个“-”。因为我想要第一个“-”之前的字母和最后一个“-”之后的字母。所有其他“-”以及字母或数字或任何要排除的内容。

理想情况下,结果小标题必须如下所示:

结果表必须如下所示:

瓦尔 ID1 ID2 食物
1 0001 美国A1 披萨
2 0023 ?2马耳他 面食
3 009876 !匈牙利 伯格
4 不适用 不适用 披萨
val = c(1,2,3,4)
tor = c( "0001-NEW YORK - M.AVENUE, NY-U.S.A1"  ,                                            
         "0023-cARAVAGGIO-NICOLO-PERUGIA-?2MALTA"        ,                                              
         "009876-bUDAPEST-!HUNGARY" ,NA)
food = c("pizza","pasta","berger","pizza")
DATA = tibble(val,tor,food)
r string dataframe
1个回答
0
投票

执行此操作的

tidyr
方法是使用
separate_wider_regex()

DATA |>
    tidyr::separate_wider_regex(
        tor,
        c(
            ID1 = "\\d+",
            "-.+-",
            ID2 = ".+"
        )
    )

# # A tibble: 4 × 4
#     val ID1    ID2      food  
#   <dbl> <chr>  <chr>    <chr> 
# 1     1 0001   U.S.A1   pizza 
# 2     2 0023   ?2MALTA  pasta 
# 3     3 009876 !HUNGARY berger
# 4     4 NA     NA       pizza 
© www.soinside.com 2019 - 2024. All rights reserved.