【问题标题】:How to remove rows with more than 5 periods如何删除超过 5 个句点的行
【发布时间】:2021-10-07 05:09:09
【问题描述】:

我在一个 xlsx 文件中有数千行,我想删除所有超过 5 个句点的行(每一行都是数字、字母和句点的组合)。

我在 Excel 中的 3 行示例:

2a02.587.e815.cb8d.35bf.5c99.8d51.417b

2a02.587.e815.727

3a03.5c99.8d51.417b.5212e

我使用了以下代码,但它返回错误:

library(tidyverse)

    df1 %>% 
       filter(str_count("[.]") >=5)

【问题讨论】:

  • 我对这个问题有似曾相识的感觉......
  • 至少这次他提供了样本数据

标签: r string filtering stringr


【解决方案1】:

您可以用同样的方式修改您的解决方案。在这里,我首先使用两个反斜杠转义 .,以指定引用文字 .

library(stringr)

df1 %>%
  filter(str_count(str, "\\.") <= 5)

# A tibble: 2 x 1
  str                      
  <chr>                    
1 2a02.587.e815.727        
2 3a03.5c99.8d51.417b.5212e

数据

structure(list(str = c("2a02.587.e815.cb8d.35bf.5c99.8d51.417b", 
"2a02.587.e815.727", "3a03.5c99.8d51.417b.5212e")), row.names = c(NA, 
-3L), class = c("tbl_df", "tbl", "data.frame"))

【讨论】:

  • 谢谢,它说“过滤器错误(., str_count(str, "\\.")
  • No test 是我的数据集的名称。您应该改用绑定到数据集的名称,而您的解决方案的问题是您没有在其值 @antonis34 中指定要计算 .s 的变量的名称。
  • 感谢它现在显示此错误“错误:df_slice() 中的内部错误:列必须与数据框大小匹配。运行rlang::last_error() 以查看错误发生的位置。”我运行了这段代码,因为我有 2816 行 structure(list(str = c(df1)), row.names = c(NA, -2816L), class = c("tbl_df", "tbl", "data.frame"))
  • 你可以使用我上面分享的数据集,看看我是如何组织数据的。这很简单。您能否与dput(head(data)) 分享您的数据集以及您的代码。
  • 非常感谢,我稍微修改了代码并工作了,不得不自己思考如何修改它,我对 R 太笨了,再次感谢。
【解决方案2】:

使用gsub + nchar 尝试下面的代码,这会删除除. 之外的所有字符:

df %>%
  filter(nchar(gsub("[^.]", "",V1))<=5)

它给了

                         V1
1         2a02.587.e815.727
2 3a03.5c99.8d51.417b.5212e

#数据

> dput(df)
structure(list(V1 = c("2a02.587.e815.cb8d.35bf.5c99.8d51.417b", 
"2a02.587.e815.727", "3a03.5c99.8d51.417b.5212e")), class = "data.frame", row.names = c(NA,
-3L))

【讨论】:

  • 非常感谢,我稍微修改了代码并工作了,不得不自己思考如何修改它,我对 R 太笨了,再次感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多