基于行值选择列

3

我希望能够根据行中的值(如果可能使用dplyr友好的方法)对列进行子集化。

数据框的样式如下,但有更多的列:

df <- 
data.frame(a = c("a","b","c","bingo"),
b = c("d","e","a","b"),
c = c("bingo","bingo","a","e"))

我想选择只包含值“bingo”的列, 类似于

df %>% select(columns_that_contain("bingo"))

期望的输出结果:

     a     c
1     a bingo
2     b bingo
3     c     a
4 bingo     e

非常感谢您的帮助!

2个回答

3

select-helpers,即starts_with/ends_with/contains/matches,是在列名上进行匹配以select选择列。如果需要在列中匹配值,请使用select内的where并创建逻辑条件,例如:'bingo' %in% .这里的.是单个列的值,并返回一个单一的TRUE/FALSE值,因为%in%的lhs是长度为1的元素。

library(dplyr)
df %>% 
      select(where(~ 'bingo' %in% .))

或者另一个选项是 任意

df %>%
    select(where(~ any(. == 'bingo')))

1
非常抱歉,亲爱的阿伦,我在打字时没有看到你的回答。 - Anoushiravan R
1
@AnoushiravanR 不需要道歉。你的解决方案不同,因为它也匹配子字符串。 - akrun

2
您可以使用以下代码:
library(dplyr)
library(stringr)

df %>%
  select(where(~ any(str_detect(.x, "bingo"))))

      a     c
1     a bingo
2     b bingo
3     c     a
4 bingo     e


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接