Как проверить и удалить, совпадает ли строка в одном столбце со строкой в ​​другом столбце в R - PullRequest
1 голос
/ 29 мая 2020

У меня большой фрейм данных. Примеры данных:

> df <- data.frame(MAKE = c('FORD','FORD','FORD','BMW','BMW'),
+                    MODEL = c('ECO SPORT','ECO SPORT','ECO SPORT','3 SERIES','5 SERIES'),
+                  VARIANT = c('ECOSPORT 1.0','ECOSPORT 1.5','ECOSPORT 1.5','E90','5 SERIES F(10)'),
                   stringsAsFactors = 0)
> 
> df
  MAKE     MODEL        VARIANT
1 FORD ECO SPORT   ECOSPORT 1.0
2 FORD ECO SPORT   ECOSPORT 1.5
3 FORD ECO SPORT   ECOSPORT 1.5
4  BMW  3 SERIES            E90
5  BMW  5 SERIES   5 SERIES F(10)
> 

Мне нужно найти и удалить строки в столбце «ВАРИАНТ», которые находятся в столбце «МОДЕЛЬ». Сначала я попытался идентифицировать строки, используя команду ниже, но это не сработало.

> df[df$MODEL %in% df$VARIANT,]
[1] MAKE    MODEL   VARIANT
<0 rows> (or 0-length row.names)
> 

Может ли кто-нибудь сообщить мне, как выполнить sh то же самое. Ожидаемый результат:

> df
  MAKE     MODEL        VARIANT
1 FORD  ECO SPORT         1.0
2 FORD  ECO SPORT         1.5
3 FORD  ECO SPORT         1.5
4  BMW   3 SERIES         E90
5  BMW   5 SERIES         F(10)
> 

1 Ответ

1 голос
/ 29 мая 2020

Мы могли бы использовать str_remove

library(dplyr)
library(stringr)   
df %>%
    mutate_if(is.factor, as.character) %>%
    mutate(VARIANT  = str_remove_all(VARIANT,
              str_remove(MODEL, '(?<=[A-Z]) (?=[A-Z])')))
#  MAKE     MODEL VARIANT
#1 FORD ECO SPORT     1.0
#2 FORD ECO SPORT     1.5
#3 FORD ECO SPORT     1.5
#4  BMW  3 SERIES     E90
#5  BMW  5 SERIES   F(10)
...