【问题标题】:How to remove certain lines in a text?如何删除文本中的某些行?
【发布时间】:2021-09-25 12:42:35
【问题描述】:
data <- "as follows:\n\n          YEAS--231\n\n     Adams\n     Aguilar\n "

我想要以 2 个或更少空格开头的行,输出如下:

"as follows:"

如果它们以 3 个或更多空格开头,则删除这些行。

text <- str_split(data,"\n")

“文本”的类型是列表,有没有办法将“文本”转换为字符?或者任何其他方式得到我的结果?

【问题讨论】:

  • 您能否在问题中包含您的预期输出?
  • 很抱歉我没有明确提出我的问题。只是做了一些澄清。你有什么建议吗?谢谢!

标签: r text


【解决方案1】:

您可以在'\n' 上拆分字符串,并使用grep 返回字符串开头少于3 个空格的字符串。

data <- "as follows:\n\n          YEAS--231\n\n     Adams\n     Aguilar\n "
grep('^\\s{3,}', unlist(strsplit(trimws(data), '\n+')), value = TRUE, invert = TRUE)
#[1] "as follows:"

使用stringr 函数-

library(stringr)
library(magrittr)

str_split(trimws(data), '\\n+') %>%
  unlist() %>%
  str_subset('^\\s{3,}', negate = TRUE)

【讨论】:

  • 使用sapply 将其应用于每个值。 df$text1 &lt;- sapply(df$V2, function(x) toString(grep('^\\s{3,}', unlist(strsplit(trimws(x), '\n+')), value = TRUE, invert = TRUE)))
【解决方案2】:

这是tidyverse方式:

library(tidyverse)
data <- "as follows:\n\n          YEAS--231\n\n     Adams\n     Aguilar\n "
cat(data)
#> as follows:
#> 
#>           YEAS--231
#> 
#>      Adams
#>      Aguilar
#> 

data %>%
  # apply functions on each line
  str_split("\n") %>%
  simplify() %>%
  # lines starting with at least 3 spaces
  discard(~ .x %>% str_starts("[ ]{3}")) %>%
  # empty lines
  discard(~ .x %>% str_trim() == "") %>%
  paste0(collapse = "\n") %>%
  cat()
#> as follows:

reprex package (v2.0.1) 于 2021-09-26 创建

【讨论】:

  • 我想删除以 3 个或更多空格开头的行。对不起,我没有清楚地表达我的问题。有什么建议么?谢谢!
  • @Foulball 我修改了答案
猜你喜欢
  • 2019-10-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-08
  • 2020-09-23
  • 1970-01-01
  • 1970-01-01
  • 2023-03-23
相关资源
最近更新 更多