我想在多个列中查找特定项目的两个字符串。我需要获取 Item_Name 中每个项目包含“0/1”或“1/1”的列名。
示例数据框:
商品名称 | 样品_A | 样品_B | 样本_C |
---|---|---|---|
尼诺1 | 0/1 | 0/0 | 1/1 |
尼诺2 | 0/0 | 1/1 | 0/1 |
尼诺3 | 1/1 | 0/1 | 0/0 |
预期输出:
Nino1 - 样品A、样品_C
Nino2 - 样本_B、样本_C
Nino3 - 样品_A、样品_B
到目前为止我知道使用 grepl 一次查找一种模式。我不知道如何获取 colnames 部分。
data_frame_mod <- dataframe[Reduce(`|`, lapply(dataframe, grepl, pattern = "0/1"))]
谢谢
这是一个相当基本的方法:
library(tidyverse)
desired <- c("0/1", "1/1")
dataframe |>
rowwise() |>
mutate(samples = names(dataframe)[str_detect(names(dataframe), "Sample") & c_across(everything()) %in% desired] |> paste(collapse = ", ")) |>
ungroup()
输出:
# A tibble: 3 × 5
Item_Name Sample_A Sample_B Sample_C samples
<chr> <chr> <chr> <chr> <chr>
1 Nino1 0/1 0/0 1/1 Sample_A, Sample_C
2 Nino2 0/0 1/1 0/1 Sample_B, Sample_C
3 Nino3 1/1 0/1 0/0 Sample_A, Sample_B