问题描述
我想合并两列以删除所有NA,但是同时两列都有值,我只想保留最高值。
示例:
df <- data.frame(A = c(1,1,NA),B = c(0,NA,1))
A B
1 1 0
2 0 NA
3 1 1
4 0 1
5 1 NA
6 1 1
7 0 0
8 0 1
9 NA 1
想要的结果
A B C
1 1 0 1
2 0 NA 0
3 1 1 1
4 0 1 1
5 1 NA 1
6 1 1 1
7 0 0 0
8 0 1 1
9 NA 1 1
解决方法
您可以计算按行的最大值,删除NA
个值:
matrixStats::rowMaxs(as.matrix(df),na.rm = TRUE)
#[1] 1 0 1 1 1 1 0 1 1
或与dplyr
一起使用:
library(dplyr)
df %>%
rowwise() %>%
mutate(C = max(c_across(),na.rm = TRUE))
# A B C
# <dbl> <dbl> <dbl>
#1 1 0 1
#2 0 NA 0
#3 1 1 1
#4 0 1 1
#5 1 NA 1
#6 1 1 1
#7 0 0 0
#8 0 1 1
#9 NA 1 1
,
我们可以将reduce
与pmax
一起使用
library(dplyr)
library(purrr)
df %>%
mutate(C = reduce(.,pmax,na.rm = TRUE))
-输出
# A B C
#1 1 0 1
#2 0 NA 0
#3 1 1 1
#4 0 1 1
#5 1 NA 1
#6 1 1 1
#7 0 0 0
#8 0 1 1
#9 NA 1 1