使用带有粘贴的For循环将df中的值替换为另一个df中的值

使用带有粘贴的For循环将df中的值替换为另一个df中的值,r,loops,dataframe,replace,paste,R,Loops,Dataframe,Replace,Paste,我有一个关于用另一个数据帧的标准化拼写替换一个数据帧中的拼写错误的问题。具体地说,我有一个巨大的文件,其中包含多列抗生素名称(拼写错误)及其相应的结果(耐药(-)或敏感(+))。 我制作了一个新的df,其中包含每个抗生素名称的标准化版本,但我不确定如何用标准化版本替换第一个数据框中多个列中的许多拼写错误,同时使其与原始结果保持关联。 下面是我的df的一个例子,其中包含3列拼写错误的抗生素及其实验室结果 Antibiotics.1 <- tibble(Sample = c('1','2','

我有一个关于用另一个数据帧的标准化拼写替换一个数据帧中的拼写错误的问题。具体地说,我有一个巨大的文件,其中包含多列抗生素名称(拼写错误)及其相应的结果(耐药(-)或敏感(+))。 我制作了一个新的df,其中包含每个抗生素名称的标准化版本,但我不确定如何用标准化版本替换第一个数据框中多个列中的许多拼写错误,同时使其与原始结果保持关联。 下面是我的df的一个例子,其中包含3列拼写错误的抗生素及其实验室结果

Antibiotics.1 <- tibble(Sample = c('1','2','3'),
              A1_Name = c('AMOXCILLIN','AMOXCILLIN','CHLORAMHENICOL'),
              A1_Result = c('+','-','-'),
              A2_Name = c('CHLORAMPHENICOL ','APRMYCIN ','APRMYCIN '),
              A2_Result = c('-','+','-'),
              A3_Name = c('FLORFENICO','FLORFENICO','AMOXCILLIN'),
              A3_Result = c('+','+','-'))

1.1首先在查找数据框中添加正确的拼写:

standardised_antibiotics.1 <- tibble(A_Name = c('AMOXCILLIN','CHLORAMHENICOL','APRMYCIN','FLORFENICO', 'AMOXICILLIN','CHLORAMPHENICOL','APRAMYCIN','FLORFENICOL'),
                                     A_Name_Standardised = c('AMOXICILLIN','CHLORAMPHENICOL','APRAMYCIN','FLORFENICOL', 'AMOXICILLIN','CHLORAMPHENICOL','APRAMYCIN','FLORFENICOL'))
或者在不添加正确名称的情况下,可以使用
stringr::str\u replace\u all()

standardised_antibiotics.1 <- tibble(A_Name = c('AMOXCILLIN','CHLORAMHENICOL','APRMYCIN','FLORFENICO', 'AMOXICILLIN','CHLORAMPHENICOL','APRAMYCIN','FLORFENICOL'),
                                     A_Name_Standardised = c('AMOXICILLIN','CHLORAMPHENICOL','APRAMYCIN','FLORFENICOL', 'AMOXICILLIN','CHLORAMPHENICOL','APRAMYCIN','FLORFENICOL'))
library(dplyr)

Antibiotics.1 %>%
  mutate(across(ends_with("Name"), ~ standardised_antibiotics.1$A_Name_Standardised[match(trimws(.x), standardised_antibiotics.1$A_Name)]))

# A tibble: 3 x 7
  Sample A1_Name         A1_Result A2_Name         A2_Result A3_Name     A3_Result
  <chr>  <chr>           <chr>     <chr>           <chr>     <chr>       <chr>    
1 1      AMOXICILLIN     +         CHLORAMPHENICOL -         FLORFENICOL +        
2 2      AMOXICILLIN     -         APRAMYCIN       +         FLORFENICOL +        
3 3      CHLORAMPHENICOL -         APRAMYCIN       -         AMOXICILLIN -     
library(stringr)

Antibiotics.1 %>%
  mutate(across(ends_with("Name"), ~ str_replace_all(trimws(.x), setNames(standardised_antibiotics.1$A_Name_Standardised, standardised_antibiotics.1$A_Name))))