【问题标题】:R filtering for strings across several columnsR过滤跨多列的字符串
【发布时间】:2021-09-16 00:38:47
【问题描述】:

我有一个包含多行字符的数据集。由于无法进入这里的原因,我需要将这些列保留为字符列,但需要过滤掉包含字母的行。

简而言之,是这样的:

A B C
1 A 4
2 3 B
5 6 7

在不将列转换为数字列的情况下,我需要过滤掉前两行,因为它们包含文本字符。

我尝试了以下但没有运气:

df %>%
filter(str_detect(c(A:C), "[AZ]") != "[AZ]")

【问题讨论】:

  • 你的意思是"[A-Z]"? "[AZ]" 只会匹配字符“A”或“Z”。除此之外,尚不清楚您希望该语法做什么...str_detect 返回一个逻辑值,但您将其与字符串 "[AZ]" 进行比较

标签: r dplyr


【解决方案1】:

如果你想使用stringr和str_detect你可以试试:

library(stringr)
library(dplyr)

df %>% 
  filter(across(A:C, ~!str_detect(., "[A-Z]")))

或基于data.frame中的所有列filter:

df %>% 
  filter(across(everything(), ~!str_detect(., "[A-Z]")))

输出

  A B C
1 5 6 7

【讨论】:

  • 太棒了!谢谢!这两个选项都有效,但第一个选项适用于我的特定问题,因为我只想过滤某些列。
【解决方案2】:
library(dplyr)

df %>% 
  filter(if_all(.fns = function(x) as.numeric(x)))

# A tibble: 1 x 3
    A     B     C    
  <int> <chr> <chr>
1   5     6     7 

【讨论】:

    【解决方案3】:

    在基础 R 中,您可以使用 df[complete.cases(sapply(df, match, 0:9)),]

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-26
      • 1970-01-01
      • 2019-10-23
      • 1970-01-01
      • 2021-12-09
      • 1970-01-01
      • 2018-02-23
      • 2022-01-14
      相关资源
      最近更新 更多