簡體   English   中英

匹配字符值並更改 R 中不同列中的相應值

[英]Matching character values and changing an according value in a different column in R

我正在嘗試將字符向values[1:73]與數據框中的一列進行匹配,以對同一數據框 (1,258 x 74) 中的完全不同的列進行更改。

假設向量是

 [1] "AA1"                   "BB1"                              
 [3] "AA2"                   "BB2"

數據框是

   Instrument             Holder        
   <chr>                  <chr>                       
 1 CB                     AA1
 2 CH                     BB2
 3 CH                     XX
 4 CB                     YY
 5 CH                     BB2     

現在我需要將向量與df$Holder匹配,如果匹配,則將df$Instrument CH 更改為 CB。

我嘗試過match()和一些過濾,但最終得到了錯誤的輸出。

indx <- match(vector, df$Holder)
indx <- indx[!is.na(indx)]

for (i in seq_along(indx)) {
  df$Instument[indx[i]] <- c("CB")
}

for (i in seq_along(vector)){
  new <- df %>%
    filter(Holder == vector[i]) %>%
    mutate(Instrument = "CB")
}

期待你的想法!

謝謝

不太確定,但我認為這就是你想要的:

數據

vector <- c("AA1", "BB1", "AA2", "BB2")
library(dplyr)
df <- tribble(
~Instrument,           ~Holder,                    
 "CB",                     "AA1",
 "CH",                     "BB2",
 "CH",                     "XX",
 "CB",                     "YY",
 "CH",                     "BB2"  
)

'匹配'

df_new <- df %>% 
  mutate(test = stringi::stri_detect_regex(
    df$Holder,
    paste0(vector, collapse = "|")
  )) %>% 
  mutate(Instrument = ifelse(test,
                             "CB",
                             Instrument))
df_new
#> # A tibble: 5 x 3
#>   Instrument Holder test 
#>   <chr>      <chr>  <lgl>
#> 1 CB         AA1    TRUE 
#> 2 CB         BB2    TRUE 
#> 3 CH         XX     FALSE
#> 4 CB         YY     FALSE
#> 5 CB         BB2    TRUE

為了您的利益,我創建了一個名為 test 的新專欄,以便更容易了解正在發生的事情。 每當testTRUE ,Instrument 列就會發生變化,否則保持不變。 paste0(vector, collapse = "|")從向量中的不同模式生成單個正則表達式。 stringi::stri_detect_regexgrepl相同,即如果在字符串中找到模式則返回TRUE (但如果你不想使用stringi這里與grepl mutate(test = grepl(paste0(vector, collapse = "|"), df$Holder)) 。)

暫無
暫無

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

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