r-删除pivot_waider之后的NA以匹配行



我使用pivot_wider展开一列,这样我就可以使用xy图比较两组(var1和var2(。但我无法比较它们,因为列中有相应的NA。

以下是一个示例数据帧:

df <- data.frame(group = c("a", "a", "b", "b", "c", "c"), var1 = c(3, NA, 1, NA, 2, NA), 
var2 = c(NA, 2, NA, 4, NA, 8))

我希望它看起来像:

df2 <- data.frame(group = c("a", "b", "c"), var1 = c(3, 1, 2), 
var2 = c( 2,  4, 8))

您可以使用summary。但这治标不治本。id_cols中可能有一列,它与values_from中的变量一一对应。

library(dplyr)
df %>%
group_by(group) %>%
summarize_all(sum, na.rm = T)
# A tibble: 3 x 3
group  var1  var2
<fct> <dbl> <dbl>
1 a         3     2
2 b         1     4
3 c         2     8

这个解决方案更健壮,从开始有一个更通用的data.frame

df <- data.frame(col_1 = c("A", "A", "A", "A", "A", "A", "B", "B", "B"), 
col_2 = c(1, 3, NA, NA, NA, NA, 4, NA, NA),
col_3 = c(NA, NA, 2, 5, NA, NA, NA, 5, NA),
col_4 = c(NA, NA, NA, NA, 5, 6, NA, NA, 7))
df %>% dplyr::group_by(col_1) %>% 
dplyr::summarise_all(purrr::discard, is.na)

这里有一种方法,假设您按组只有两行,并且一行具有NA

library(dplyr)
df %>% group_by(group) %>% 
summarise(var1=max(var1,na.rm=TRUE),
var2=max(var2,na.rm=TRUE))

na.rm=TRUE不会对NA进行计数,并且仅在一个值(非NA的值(上获得最大值

最新更新