Как связать два столбца в один, чтобы сохранить каждый ряд? - PullRequest
1 голос
/ 22 апреля 2020

Я объединил таблицу с номинантами и фильмами, в которых они выиграли Оскар и Земной шар. Столбцы для фильмов - film.x и film.y для Оскара и Глобуса соответственно. Я создал фильм колонки, чтобы создать список фильмов всех фильмов, которые получили награды. Мне удалось сопоставить фильмы из film.x с фильмами следующим образом:

 if(!is.na(winners$film.x)) {
      winners$film = winners$film.x
    }

И это сработало. Хотя я получил предупреждение: Предупреждающее сообщение:

In if (!is.na(winners$film.x)) { :
  the condition has length > 1 and only the first element will be used

Но когда я попытался сделать то же самое для film.y:

if(is.na(winners$film)) {
  winners$film = winners$y
}

Я попытался сделать это следующим образом:

winners$film[is.na(winners$film)] <- winners$film.y

Но получил ошибку:

In x[...] <- m :
  number of items to replace is not a multiple of replacement length

Могу поспорить, что есть действительно простой способ сделать это, которого я просто не знаю. Мне бы хотелось, чтобы столбцы film.x и film.y представляли собой один столбец с соответствующими актерами (номинантами) для каждого ряда.

1 Ответ

1 голос
/ 22 апреля 2020

Мы можем использовать coalesce, чтобы получить первый не-NA элемент в каждой строке

library(dplyr)
winners2 <- winners %>%
              mutate_at(vars(film.x, film.y), as.character) %>%
              mutate(film = coalesce(film.x, film.y)) %>%
              select(-film.x, -film.y)

Или, если мы используем base R, убедитесь, что длина элементов одинакова в lhs и rhs из <-

i1 <- is.na(winners$film)
winners$film[i1] <- winners$film.y[i1]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...