簡體   English   中英

基於字符串是否包含所述標識符的新標識符列到數據框

[英]New identifier column to dataframe based on whether string contains said identifier

我是 R 的絕對新手。我想要實現的是根據同一行中的字符串值是否包含該標識符,將標識符添加到每個數據框行。

假設數據框:

df <- data.frame(Code = c("DE8230", "18FR16", "2UK34", "45BE87C", "1894DE56", "AB12FR", "ES12456"),
                 Type = c("A", "B", "C", "C", "E", "A", "C"),
                 Value = c(12, 14, 8, 20, 21, 16, 5))


      Code Type Value
1   DE8230    A    12
2   18FR16    B    14
3    2UK34    C     8
4  45BE87C    C    20
5 1894DE56    E    21
6   AB12FR    A    16
7  ES12456    C     5

我想根據標識符(例如 DE、FR、UK、BE、ES)是否存在於“代碼”列中來添加一個國家/地區列,而不是列出該國家/地區。

我嘗試了什么:

identifiers <- c("DE", "FR", "UK") #identifiers of choice

df <- mutate(df, country = 0)

for (i in 1:length(identifiers)){
  df <- mutate(df,
          country = ifelse(grepl(identifiers[i], Code), identifiers[i], country)
  )
}

哪個產量:

      Code Type Value country
1   DE8230    A    12      DE
2   18FR16    B    14      FR
3    2UK34    C     8      UK
4 1894DE56    C    20      DE
5   AB12FR    E    21      FR

雖然這可行,但我認為必須有一個更優雅的解決方案,省略 for 循環並只使用相同的 dplyr 語句。 但是,我一直無法弄清楚。

Nb:重要的是,提到的標識符列在單獨的向量或列表中,而不是 mutate 語句的一部分。 這只是一個假設的例子,數據集和標識符的數量要大得多。

我們可以通過將標識符作為單個字符串與| paste來使用str_extract 分隔符並從“代碼”中提取那些子字符串

library(dplyr)
library(stringr)
df %>% 
  mutate(country = str_extract(Code, str_c(identifiers, collapse = "|"))) %>% 
   drop_na(country)

-輸出

      Code Type Value country
1   DE8230    A    12      DE
2   18FR16    B    14      FR
3    2UK34    C     8      UK
4 1894DE56    E    21      DE
5   AB12FR    A    16      FR

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM