обновить таблицу, где столбец эквивалентен в R - PullRequest
0 голосов
/ 08 октября 2019

У меня большой массив данных. Мне нужно обновить конкретную переменную, как показано в приведенном ниже воспроизводимом коде:

df <- data.frame(source = c('mercury','inbound','leaflet','local','campaigning','branding'),
amount = c(100,99,101,87,123,99))

Мне нужно нечто эквивалентное приведенному ниже SQL-коду в R.

update df set source = 'ABC' where source in ('leaflet','local','campaigning','branding')

Я могу обойтись с помощью gsub, ноЯ могу обновлять на основе только одного условия за раз, но мне нужно обновить несколько значений на основе нескольких условий, как указано выше.

Ответы [ 2 ]

1 голос
/ 08 октября 2019

Мы можем использовать case_when из dplyr

library(dplyr)
df %>%
      mutate(source = case_when(source %in% 
             c('leaflet','local','campaigning','branding') ~ "ABC",
          TRUE ~ source))
#    source amount
#1 mercury    100
#2 inbound     99
#3     ABC    101
#4     ABC     87
#5     ABC    123
#6     ABC     99

данные

df <- structure(list(source = c("mercury", "inbound", "leaflet", "local", 
"campaigning", "branding"), amount = c(100, 99, 101, 87, 123, 
99)), class = "data.frame", row.names = c(NA, -6L))
0 голосов
/ 08 октября 2019

Вы можете обновить значения source как

df$source[df$source %in% c('leaflet','local','campaigning','branding')] <- "ABC"
df

#   source amount
#1 mercury    100
#2 inbound     99
#3     ABC    101
#4     ABC     87
#5     ABC    123
#6     ABC     99

data

Убедитесь, что вместо факторов указаны символьные данные.

df <- data.frame(source = c('mercury','inbound','leaflet','local','campaigning',
'branding'),amount = c(100,99,101,87,123,99), stringsAsFactors = FALSE)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...