r - 如何将两列绑定为一列以保留每一行?
问题描述
我将表格与被提名者以及他们赢得奥斯卡和全球奖的电影合并。电影的列分别是 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 只是一列,每一行都有相应的演员(被提名人)。
解决方案
我们可以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]
推荐阅读
- javascript - 如何使用 JS 获取 css href 链接?
- sql - SQL Pivot 选择多行
- ios - 在输入时逐个字母验证 UITextField 文本
- python-3.x - 我们可以在 docker 中同时设置 PHP 7.x 和 Python 3.x 吗?
- python - 如何将切片转换为python中的索引列表?
- javascript - 显示任何数字输入的数据
- android - Firebase 分析不提供自定义事件详细信息,而是(共)0 项
- javascript - 以自上而下/自下而上的方式制作 D3 js 家谱
- angular-dart - 新的 angular dart 项目无法从 IntelliJ 开始
- python - 即使在 IDE (Spyder) 关闭后也运行 Python 代码?