在多列中查找特定项目的多个字符串并返回 R 中的列名

问题描述 投票:0回答:1

我想在多个列中查找特定项目的两个字符串。我需要获取 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"))]

谢谢

r dplyr lapply grepl
1个回答
0
投票

这是一个相当基本的方法:

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
© www.soinside.com 2019 - 2024. All rights reserved.