удалить все строки с символьной строкой, заканчивающейся указанной c строкой в ​​R - grepl - PullRequest
0 голосов
/ 02 апреля 2020

Я хочу удалить все строки, заканчивающиеся на "_bundle". Я пробовал две разные вещи, но ничего, если работал

claimsVolumeSC <- basisPerClaim[!grepl( '$_bundle', basisPerClaim$subcoveragekey),]
levels(claimsVolumeSC$subcoveragekey)
claimsVolumeSC <- basisPerClaim[!grepl( '\\>_bundle', basisPerClaim$subcoveragekey),]
levels(claimsVolumeSC$subcoveragekey)

Как мне добиться того, чего я хочу? Почему то, что я пробовал до сих пор, не работает?

> claimsVolumeSC <- basisPerClaim[!grepl( '$_bundle', basisPerClaim$subcoveragekey),]
> levels(claimsVolumeSC$subcoveragekey)
[1] "DA_Chemo"         "Daily_cash"       "Funeral"          "IP_Accommodation" "IP_bundle"        "IP_Upgrade"       "OP_Dialysis"     
[8] "OP_Physio"       
> claimsVolumeSC <- basisPerClaim[!grepl( '\\>_bundle', basisPerClaim$subcoveragekey),]
> levels(claimsVolumeSC$subcoveragekey)
[1] "DA_Chemo"         "Daily_cash"       "Funeral"          "IP_Accommodation" "IP_bundle"        "IP_Upgrade"       "OP_Dialysis"     
[8] "OP_Physio"   

Ответы [ 2 ]

0 голосов
/ 02 апреля 2020

Вы можете использовать subset с grepl

claimsVolumeSC <- subset(basisPerClaim, !grepl( '_bundle$', subcoveragekey))

Если вам не нужны коэффициенты в данных, измените их на символы.

claimsVolumeSC$subcoveragekey <- as.character(claimsVolumeSC$subcoveragekey)
0 голосов
/ 02 апреля 2020

Решением может быть решение на основе регулярных выражений:

Воспроизводимые данные :

set.seed(123)
df <- data.frame(
  Var1 = rnorm(100),
  Var2 = sample(c(paste0(LETTERS[1:10],letters[10:18], letters[18:26], letters), paste0(letters[1:10],"bundle")), 100, replace = T),
  Var3 = sample(c(paste0(LETTERS[1:10],letters), paste0(letters[1:10],"bundle")), 100, replace = T))

head(df)
         Var1    Var2    Var3
1 -0.56047565    Irzi cbundle
2 -0.23017749 ibundle      Aa
3  1.55870831    Bmuv cbundle
4  0.07050839    Ijrs abundle
5  0.12928774    Eowo      Cw
6  1.71506499 fbundle      Hr

Решение :

Здесь мы paste0 все строки вместе, сопоставляем все bundle строки, используя grepl, и вычитаем (-) эти строки из кадра данных which, соответствующие шаблону:

df[-which(grepl("bundle", apply(df, 1, paste0, collapse = " "))),]

Результат :

Если мы сохраним подмножественный кадр данных как df2, результат будет следующим:

df2 <- df[-which(grepl("bundle", apply(df, 1, paste0, collapse = " "))),]

head(df2)
         Var1 Var2 Var3
5   0.1292877 Eowo   Cw
7   0.4609162 Dnvn   Ff
8  -1.2650612 Aksk   Aa
9  -0.6868529 Gpxg   Gq
10 -0.4456620 Gpxg   Hr
11  1.2240818 Hrzr   Eo

Примечание :

Это решение полезно, если соответствующая строка разбросана по нескольким столбцам. Если совпадение происходит только в одном столбце, нормальных процедур поднабора будет достаточно.

...