如何在R中同时使用带多个前缀的startsWith和str_length
我想使用startsWith和str_length来标识endpt_ds$DX1中以dx9中的字符串开头且前缀长度大于或等于3的条目。这是我尝试过的,但它返回的数据帧为零行。我希望它返回包含原始数据帧的第1、第4和第5行的数据帧:如何在R中同时使用带多个前缀的startsWith和str_length,r,prefix,string-length,startswith,R,Prefix,String Length,Startswith,我想使用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
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
dx9=c(作为字符(8:10))
DX1一个选项是使用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
一个选项是使用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
固定的!(我在DX1中添加了一个右括号)是的,我不想让它返回第7行。好的,对不起,我正在检查您的前五个示例对不起,混淆了!固定的!(我在DX1中添加了一个右括号)是的,我不想让它返回第7行。好的,对不起,我正在检查您的前五个示例对不起,混淆了!嗨,阿克伦。不幸的是,这并不完全正确,因为我不希望它返回任何数字,只返回dx9中的数字。我对示例进行了编辑,以包含一个条目,该条目以不在dx9中的数字开头,长度为3,因此不应返回该条目,但它是由您的答案返回的。@abra如果它不在“dx9”中,为什么要返回第5行。它也以10开头?dx9包含10。dx9=c(as.character(8:10))dx9=c(8,9,10),因此我想要第5行returned@abra是的,第5行和第7行也有10作为起始前缀。我的观点是,如果你要删除7,为什么不能5现在它是完美的。非常感谢。嗨,阿克伦。不幸的是,这并不完全正确,因为我不希望它返回任何数字,只返回dx9中的数字。我对示例进行了编辑,以包含一个条目,该条目以不在dx9中的数字开头,长度为3,因此不应返回该条目,但它是由您的答案返回的。@abra如果它不在“dx9”中,为什么要返回第5行。它也以10开头?dx9包含10。dx9=c(as.character(8:10))dx9=c(8,9,10),因此我想要第5行returned@abra是的,第5行和第7行也有10作为起始前缀。我的观点是,如果你要删除7,为什么不能5现在它是完美的。非常感谢。