在dplyr(筛选列)R中的条件下选择/删除列

在dplyr(筛选列)R中的条件下选择/删除列,r,dplyr,filtering,R,Dplyr,Filtering,是否有一种方法可以使用dplyr根据某些条件筛选出列?这有点令人困惑,因为它与正常过滤相反 我找不到任何直接适用于此的东西。发现了,但他们做的事情并不完全相同 基本上,我不想基于列的值筛选出行,而是想基于行的值删除列 下面是使用以下数据框的示例: df <- data.frame(aa = c("1", "a", "10.2", "12.1", "8.7"), ab = c("1", "b", "5.3", "8.1", "9.2"),

是否有一种方法可以使用
dplyr
根据某些条件筛选出列?这有点令人困惑,因为它与正常过滤相反

我找不到任何直接适用于此的东西。发现了,但他们做的事情并不完全相同

基本上,我不想基于列的值筛选出行,而是想基于行的值删除列

下面是使用以下数据框的示例:

df <- data.frame(aa = c("1", "a", "10.2", "12.1", "8.7"), 
                 ab = c("1", "b", "5.3", "8.1", "9.2"), 
                 ac = c("0", "a", "1.8", "21.5", "16.0"), 
                 ad = c("0", "b", "11.1", "15.9", "23.6"))

有没有一种方法可以通过使用dplyr实现这一点?我尝试使用
过滤器
选择
子集
,但没有成功,但在这种情况下,我可能使用不正确。

您可以使用以下方法:

 df <- df %>%
    select(ab, ad)
df%
选择(ab,ad)
使用此选项的好处在于,您也可以不选择使用以下想法:

 df <- df %>%
    select(-ab) 
df%
选择(-ab)
这将选择所有列,但不选择“ab”。
希望这就是你要找的

您可以使用
select\u if
,它是
select
的范围变量:

df %>%
  select_if(function(x) any(x == "b"))

#    ab   ad
# 1   1    0
# 2   b    b
# 3 5.3 11.1
# 4 8.1 15.9
# 5 9.2 23.6
在这里,我提供了一个函数来查找任何包含“b”的列

根据您的以下评论进行编辑:

df %>%
  mutate(row_n = 1:n()) %>%
  select_if(function(x) any(x == "b" & .$row_n == 2))

在这里,我们变异一个变量
n\u row
,表示行号,然后在调用
select\u时添加行号作为条件,如果

,谢谢您的尝试,但这并没有回答问题,因为没有应用任何条件。您可以在select中使用更多内容。例如:
select(contains(“a”))
有关更多信息,请查看此处:@GeorgeWood检查了链接。不解决使用条件的问题。我可以手动选择。我正试着让R帮我做。baseR解决方案有什么问题吗?我建议尝试为这个问题找到一个更好的标题,以便让搜索引擎更好地看到它。例如:选择行中包含字符串的列。“Filter”是为过滤行而保留的一种。理想情况下,尽量避免使用“df”和类似的函数,因为它们是更基本的函数,而且你会弄乱其他人的环境。@Tjebo我更改了标题以反映你的担忧。但是,我一直提到“过滤”。虽然这个问题可能不是关于过滤的,但我认为这个概念是相似的,因此,人们可能会使用这个术语来寻找这个解决方案。这是正确的,但我需要它来查看第二行,因为我的数据集中还有其他行将包含相同的值。编辑了答案,为行号添加了进一步的条件。很好的解决方案。效果很好。我做了一个小小的调整,我认为,这使它更简单、更直接。我用
行名
替换了
,以避免
变异
<代码>df%>%如果(函数(x)有(x==“b”和行名(df)==2))选择_
。当然,然后我们必须再次调用
df
,因此这是一个偏好问题。您还可以在新列的末尾使用
mutate(row\u n=NULL)
对其进行
mutate。
df %>%
  mutate(row_n = 1:n()) %>%
  select_if(function(x) any(x == "b" & .$row_n == 2))