【问题标题】:How to use startsWith and str_length simultaneously with multiple prefixes in R如何在R中同时使用带有多个前缀的startsWith和str_length
【发布时间】:2020-02-04 06:54:37
【问题描述】:

我想使用 startsWith 和 str_length 来识别 endpt_ds$DX1 中以 dx9 中的字符串开头并且前缀长度大于或等于 3 的条目。这是我尝试过的,但是它返回一个零行的数据框。我希望它返回一个包含原始数据帧的第 1、第 4 和第 5 行的数据帧:

dx9 = c(as.character(8:10))
DX1 <- c("8001","7","80","992","1010","93","400")
ind <- c(0,1,1,1,0,0,1)
yrMonth_ds = as.data.frame(cbind(DX1,ind))
yrMonth_ds$DX1 <- as.character(yrMonth_ds$DX1)
yrMonth_ds_endpt <- yrMonth_ds[which(startsWith(yrMonth_ds$DX1,paste0(dx9,collapse="|")) & str_length(yrMonth_ds$DX1 > 3)),]
yrMonth_ds_endpt

我非常感谢任何帮助。谢谢!

【问题讨论】:

  • 已修复! (我在 DX1 中添加了右括号)
  • 是的,我不希望它返回第 7 行。
  • 好的,抱歉,我正在检查你之前的例子
  • 很抱歉给您带来了困惑!

标签: r prefix string-length startswith


【解决方案1】:

一个选项是用nchar检查字符数,用它创建一个逻辑表达式,另外在'dx9'上使用paste,通过将它折叠成一个带有^的模式字符串来指定字符串的开头并使用 grepl 检查 'DX1' 以返回同时通过两种逻辑的行

subset(yrMonth_ds, nchar(DX1) >=3  & 
     grepl(paste0("^(", paste(dx9, collapse="|"), ")"), DX1))
#    DX1 ind
#1 8001   0
#4  992   1
#5 1010   0

【讨论】:

  • 嗨@akrun。不幸的是,这不太正确,因为我不希望它返回任何数字,只返回 dx9 中的数字。我编辑了示例以包含一个以不在 dx9 中的数字开头且长度为 3 的条目,因此不应返回它,但您的答案会返回它。
  • @abra 如果不在'dx9'中,为什么要返回第5行。它也是从10开始的?
  • dx9 包含 10。dx9 = c(as.character(8:10)) dx9 = c(8,9,10) 因此我希望返回第 5 行
  • @abra 是的,第 5 行和第 7 行也有 10 作为起始前缀。我的观点是,如果你要删除 7,为什么不能删除 5
  • 现在完美了。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-04
  • 1970-01-01
  • 2023-03-03
  • 2015-06-15
  • 1970-01-01
  • 2022-01-22
相关资源
最近更新 更多