Замените значения переменных, которые содержат определенный строковый образец - PullRequest
0 голосов
/ 01 февраля 2019

У меня есть такие данные:

library(dplyr)
glimpse(full_dat)
Observations: 9,720
Variables: 6
$ Product <chr> "Apple iPhone 4s 8GB Unlocked GSM Smartphone w/ S...
$ Brand   <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N...
$ Price   <dbl> 115, 115, 115, 115, 115, 115, 115, 115, 115, 115,...
$ Rating  <dbl> 5, 1, 4, 5, 5, 3, 5, 5, 5, 1, 5, 5, 1, 5, 2, 5, 5...
$ Reviews <chr> "It was new and at a great price! Phone came real...
$ Votes   <dbl> 2, 1, 0, 1, 2, 2, 2, 5, 2, 0, 0, 0, 0, 0, 0, 0, 0...

Я хочу изменить значения переменной Product в отношении строк.Например, если переменная содержит шаблон «iphone 4s», я хочу изменить значение только на «iphone 4s».

Псевдокод:

glimpse(full_dat)
Observations: 9,720
Variables: 6
$ Product <chr> "iPhone 4s", "iPhone 4s", "iPhone 4s", "iphone 4s...
$ Brand   <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N...
$ Price   <dbl> 115, 115, 115, 115, 115, 115, 115, 115, 115, 115,...
$ Rating  <dbl> 5, 1, 4, 5, 5, 3, 5, 5, 5, 1, 5, 5, 1, 5, 2, 5, 5...
$ Reviews <chr> "It was new and at a great price! Phone came real...
$ Votes   <dbl> 2, 1, 0, 1, 2, 2, 2, 5, 2, 0, 0, 0, 0, 0, 0, 0, 0...

Я читал аналогичный пост вчто было предложено следующее решение.

full_dat %>% 
  mutate_at(vars(contains('iphone 4s')), funs(.=='ipohne 4s'))

Однако в моем случае это не работает, то есть значения остаются неизменными.

Вот небольшой образец:

product = c(full_dat$Product[1:5])
dput(product)

c("Apple iPhone 4s 8GB Unlocked GSM Smartphone w/ Siri, iCloud and 8MP Camera - Black", 
"Apple iPhone 4s 8GB Unlocked GSM Smartphone w/ Siri, iCloud and 8MP Camera - Black", 
"Apple iPhone 4s 8GB Unlocked GSM Smartphone w/ Siri, iCloud and 8MP Camera - Black", 
"Apple iPhone 4s 8GB Unlocked GSM Smartphone w/ Siri, iCloud and 8MP Camera - Black", 
"Apple iPhone 4s 8GB Unlocked GSM Smartphone w/ Siri, iCloud and 8MP Camera - Black"
)

1 Ответ

0 голосов
/ 01 февраля 2019

Я думаю, что вы ищете

library(dplyr)

samp %>%
   mutate_at(vars(Product), funs(replace(., grepl('iPhone 4s', .), 'iphone 4s')))

Это будет replace любой Product, который содержит «iPhone 4s», просто «iphone 4s».

Конечно, вы можетесделайте это и без dplyr

df$Product <- with(samp, replace(Product, grepl('iPhone 4s', Product),'iPhone 4s'))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...