r - R动态地将具有NA的多列合并为一列
问题描述
有没有办法动态合并具有 NA 值的列?
tibble(
x = c(1:2, NA, NA, NA, NA, NA),
y = c(NA, NA, 4:7, NA),
z = c(NA, NA, NA, NA, NA, NA, 9)
)
# A tibble: 7 x 3
x y z
<int> <int> <dbl>
1 1 NA NA
2 2 NA NA
3 NA 4 NA
4 NA 5 NA
5 NA 6 NA
6 NA 7 NA
7 NA NA 9
预计:
# A tibble: 7 x 3
x y z
<int> <int> <dbl>
1 1 NA NA
2 2 NA NA
3 4 4 NA
4 5 5 NA
5 6 6 NA
6 7 7 NA
7 9 NA 9
此示例是从 xlsx 文件中读取的,因此在某些情况下该列y
或z
可能不存在
解决方案
在 Ronak 的帮助下更新。请参阅评论:现在它应该适用于具有不同列的 df:更通用的解决coalesce
方案do.call
library(dplyr)
df <- tibble(
x = c(1:2, NA, NA, NA, NA, NA),
y = c(NA, NA, 4:7, NA)
)
df %>%
mutate(result = do.call(coalesce, df))
输出:
x y result
<int> <int> <int>
1 1 NA 1
2 2 NA 2
3 NA 4 4
4 NA 5 5
5 NA 6 6
6 NA 7 7
7 NA NA NA
第一个答案
这是coalesce
from dplyr
package 的工作:在每个位置找到第一个非缺失值。
library(dplyr)
df %>% mutate(result = coalesce(x,y,z))
输出:
x y z result
<int> <int> <dbl> <dbl>
1 1 NA NA 1
2 2 NA NA 2
3 NA 4 NA 4
4 NA 5 NA 5
5 NA 6 NA 6
6 NA 7 NA 7
7 NA NA 9 9
推荐阅读
- mongodb - 在mongodb中将float64数组减少为float32
- android - FragmentNavigator 为透明背景添加片段而不是替换
- asp.net - asp.net 验证不适用于用户控件内的验证组
- html - 如何使用超链接图像修复页脚移动
- sql-server - 在sql存储过程中查找创建日期和更新日期之间的最新日期
- mysql - 错误:无法添加或更新子行:外键约束失败
- c++ - 使用 Qt 4.8 在 QDockWidget 中添加的 QVBoxLayout 中重新定位小部件
- youtube-api - Google Cloud / API:通过多个项目规避配额
- templates - 当语法在 vue 组件中看起来很完美时,“外部根元素将被忽略”错误
- loops - 批量使用多个 for 循环