我有一个名为“data”的数据集,如下所示:
我正在尝试创建一个名为“Group”的新变量,它将“FileName”变量中的元素编码如下:
为了做到这一点,我编写了这段代码:
data$Group<- ifelse(grepl("HC",data$FileName),"HC",
ifelse(grepl("SF & PBMC",data$FileName),"AS PBMC",
"AS SFMC"))
但是,任何包含元素 SF 和 PBMC 的内容都无法正确编码为“AS PBMC”。相反,它只是跳过了该条件并将其标记为“AS SFMC”。请看下面:
非常欢迎任何帮助!
首先请注意,“&”在正则表达式中不具有逻辑“与”的含义。您当然可以使用一些复杂的正则表达式来实现您想要的目标,但是首先提取您考虑用于命名组的组件,然后在第二步中分配案例不是更透明吗?
library(tidyverse)
df <- tibble(
FileName = c("HC1788 PBMC", "SF71 PBMC", "SF70_2 SFMC")
)
df |>
# extract components
mutate(
A = str_extract(FileName, "^HC|^SF"),
B = str_extract(FileName, "PBMC$|SFMC$")
) |>
# assign groups
mutate(Group = case_when(
A == "HC" ~ "HC PBMC",
A == "SF" & B == "PBMC" ~ "AS PBMC",
A == "SF" & B == "SFMC" ~ "AS SFMC"
))
#> # A tibble: 3 × 4
#> FileName A B Group
#> <chr> <chr> <chr> <chr>
#> 1 HC1788 PBMC HC PBMC HC PBMC
#> 2 SF71 PBMC SF PBMC AS PBMC
#> 3 SF70_2 SFMC SF SFMC AS SFMC
创建于 2023-10-12,使用 reprex v2.0.2