从R中的另一列分配新值

我想在 R 中创建一个包含来自另一列的值的新列,但我需要重新分配它们。这是一个示例:数据如下所示:

ID column1  column2 
1  C*0421   C*0232
2  C*0531   C*0332
3  C*0502   C*0544
4  C*0432   C*0132
5  C*0632   C*0703

所以我想要的是创建一个新列,它应该分配任何开头的内容:

C*04 should be C1
C*05 should be C2
C*07 should be C1
C*02 should be C2 
NA   should be NA

最终结果应如下所示:

ID column1  column2   results_from_column1  results_from_column2     Combining_the_results
1  C*0421   C*0232     C1                        C2                       C1/C2
2  C*0531   C*0332     C2                        C1                       C2/C1
3  C*0502   C*0544     C2                        C2                       C2/C2  
4  C*0432   C*0132     C1                        C1                       C1/C1
5  C*0632   C*0703     C2                        C1                       C2/C1

我尝试使用此代码,但它给我错误地分配了某些值,我不知道为什么

df2<- 
  df1%>% 
  mutate(
    C.groups = case_when(
      str_detect(column1, "C*01")~ "C1",
      str_detect(column2, "C*03") ~ "C1", 
        is.na(HLA.C) ~ "NA",
         TRUE ~ "C2"
    )
  )

拜托,你能帮我吗?

回答

您还可以使用以下解决方案:

library(dplyr)

df %>%
  mutate(across(!ID, ~ case_when(
    grepl("C*04", .) ~ "C1",
    grepl("C*05", .) ~ "C2",
    grepl("C*07", .) ~ "C2",
    grepl("C*02", .) ~ "C2",
    NA ~ NA_character_,
    TRUE ~ "C2"), .names = "results_from_{.col}")) %>%
  rowwise() %>%
  mutate(Combining_the_results = paste(results_from_column1, results_from_column2, 
                                        sep = "/"))

# A tibble: 5 x 6
# Rowwise: 
     ID column1 column2 results_from_column1 results_from_column2 Combining_the_results
  <int> <chr>   <chr>   <chr>                <chr>                <chr>                
1     1 C*0421  C*0232  C1                   C2                   C1/C2                
2     2 C*0531  C*0332  C2                   C2                   C2/C2                
3     3 C*0502  C*0544  C2                   C2                   C2/C2                
4     4 C*0432  C*0132  C1                   C2                   C1/C2                
5     5 C*0632  C*0703  C2                   C2                   C2/C2 


以上是从R中的另一列分配新值的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>