首页 > 解决方案 > dplyr 中位数(按组)

问题描述

我有这个数据框

df1 <- data.frame(
     Type1 = c("A","A","A", "AB", "AB"),
     Type2 = c(1L,2L,2L, 1L, 1L),
     Value = c(1L, 2L, 1L, NA, NA), , Median = c(1L, 1.5, 1.5, NA, NA))

我想通过 Type1 和 Type2 在新列中获取中位数到一个新变量“AB”,而不汇总在现有列中有一个新值。

 df12 <- data.frame(
    Type1 = c("A","A","A", "AB", "AB"),
    Type2 = c(1L,2L,2L, 1L, 1L),
    Value = c(1L, 2L, 1L, NA, NA), Median = c(1L, 1.5, 1.5, 1L, 1L))

我的尝试

df1 %>% group_by(Type1, Type2) %>% mutate(Median = ifelse(Type1 == "AB" & Type2 == 1, median(Value), Median))

标签: rif-statementdplyr

解决方案


我们可能需要在这里删除分组

library(dplyr)
df1 %>%
    mutate(Median = replace(Median, Type1 %in% 'AB' & Type2 %in% 1, 
        median(Value, na.rm = TRUE)) )

推荐阅读