我想从给定的下表数据创建两列。我希望第一列(例如 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)
执行此操作的
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