Изменять новый столбец, если значение из одного столбца соответствует столбцу с массивом значений - PullRequest
0 голосов
/ 13 апреля 2019

У меня есть две колонки.Я хочу добавить новый столбец со значением да или нет в зависимости от того, присутствует ли значение из Country в массиве значений в Major teams.

Выберите Country из Major teams

tibble::tribble(
    ~COUNTRY,                                                                                    ~Major.teams,
  "Zimbabwe",             "['Zimbabwe,', 'Zimbabwe Under-13s,', 'Zimbabwe Under-18s,', 'Zimbabwe Under-19s']",
  "Zimbabwe",                                          "['Zimbabwe,', 'Mountaineers,', 'Zimbabwe Under-19s']",
  "Zimbabwe",                                                           "['Zimbabwe,', 'Zimbabwe Under-19s']",
  "Zimbabwe",                                    "['Zimbabwe,', 'Zimbabwe Under-17s,', 'Zimbabwe Under-19s']",
  "Zimbabwe",                                                                   "['Zimbabwe,', 'Shropshire']",
  "Zimbabwe",                        "['Zimbabwe,', 'Mountaineers,', 'Zimbabwe Cubs,', 'Zimbabwe Under-19s']",
  "Zimbabwe",                                                           "['Zimbabwe,', 'Zimbabwe Under-19s']",
  "Zimbabwe",                                    "['Zimbabwe Women,', 'Mountaineers,', 'Zimbabwe Under-19s']",
  "Zimbabwe",             "['Zimbabwe,', 'Zimbabwe Under-13s,', 'Zimbabwe Under-17s,', 'Zimbabwe Under-19s']",
  "Zimbabwe",                                                            "['Zimbabwe,', 'Natal,', 'Suffolk']",
  "Zimbabwe",                                                            "['Zimbabwe,', 'Western Transvaal']",
  "Zimbabwe",                                    "['Zimbabwe,', 'Zimbabwe Under-17s,', 'Zimbabwe Under-19s']",
  "Zimbabwe",                                                                    "['Zimbabwe,', 'Southerns']",
  "Zimbabwe",           "['Zimbabwe,', 'Mountaineers,', 'Zimbabwe A,', 'Zimbabwe Under-19s,', 'Zimbabwe XI']",
   "England",                                                     "['Zimbabwe-Rhodesia,', 'Kent,', 'Surrey']"
  )

1 Ответ

1 голос
/ 13 апреля 2019

Поскольку Major.teams - это единственное строковое значение, а не список значений, для этого нужно выполнить некоторую очистку.

Мы удаляем открывающие и закрывающие квадратные скобки и апостроф ([|]|') из столбца Major.teams, а затем разделяем строку на запятую (,) и возвращаем Yes только если any иззначение точно соответствует столбцу Country.

c("No", "Yes")[mapply(function(x, y) any(x == y), 
     df$COUNTRY, strsplit(gsub("\\[|'|\\]", "", df$Major.teams), ",")) + 1] 

# [1] "Yes" "Yes" "Yes" "Yes" "Yes" "Yes" "Yes" "No"  "Yes" "Yes" "Yes" "Yes" 
#     "Yes" "Yes" "No"

Если нам нужны значения, которые соответствуют, мы можем использовать ifelse

as.character(ifelse(mapply(function(x, y) any(x == y), 
df$COUNTRY, strsplit(gsub("\\[|'|\\]", "", df$Major.teams), ",")), df$COUNTRY, ""))

#[1] "Zimbabwe" "Zimbabwe" "Zimbabwe" "Zimbabwe" "Zimbabwe" "Zimbabwe" "Zimbabwe" 
#    ""   "Zimbabwe" "Zimbabwe" "Zimbabwe" "Zimbabwe" "Zimbabwe" "Zimbabwe" ""        
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...