从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