Как использовать startWith и str_length одновременно с несколькими префиксами в R - PullRequest
1 голос
/ 07 октября 2019

Я хотел бы использовать startWith и 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

Я был бы очень признателен за любую помощь. Спасибо!

1 Ответ

0 голосов
/ 07 октября 2019

Один из вариантов - проверить количество символов с помощью nchar, создать с ним логическое выражение, кроме того, используйте paste в 'dx9', свернув его в одну строку шаблона с помощью ^, чтобы указатьначало строки и проверьте с помощью 'DX1', используя grepl, чтобы вернуть строки, которые проходят с обеими логическими схемами

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