首页 > 解决方案 > 如何将两列绑定为一列以保留每一行?

问题描述

我将表格与被提名者以及他们赢得奥斯卡和全球奖的电影合并。电影的列分别是 Oscar 和 Globe 的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 只是一列,每一行都有相应的演员(被提名人)。

标签: r

解决方案


我们可以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,请确保元素的长度在lhsrhs中相同<-

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

推荐阅读