r - 有没有一种简洁的方法来忽略几行并使用汇总函数?

标签 r dplyr

我的数据如下:

<表类=“s-表”> <标题> id 类型 值 <正文> x1 A 1 x1 A 2 x1 A 3 x1 B 2 x1 B 4 x1 B 6 x1 C 1 x1 C 3 x1 C 5

我想从上面的数据中总结出两列

  1. 每种类型的值的中位数以及
  2. 所有类型(但各自类型)的值的中位数。即,对于类型 A,计算类型 B 和 C 的值的中位数。

喜欢:

<表类=“s-表”> <标题> id 类型 median_type_value median_non_type_value <正文> x1 A 2 3.5 x1 B 4 2.5 x1 C 3 2.5

我能够计算中位数类型值,但不能计算另一个。

示例数据/代码:

library(tidyverse)
df = data.frame(id=c(rep("x1",9)), type=c(rep("A",3),rep("B",3),rep("C",3)), value=c(1,2,3,2,4,6,1,3,5))

df %>% 
group_by(id,type) %>% 
summarise(median_type_value=median(value))

如果能得到一些指导或解决方案就太好了。谢谢!

最佳答案

尝试

library(dplyr)# version >= 1.1.0
df %>% 
  reframe(median_type_value = median(value), 
   median_non_type_value = 
   median(df$value[df$type !=cur_group()$type]), .by = c(id, type))

-输出

   id type median_type_value median_non_type_value
1 x1    A                 2                   3.5
2 x1    B                 4                   2.5
3 x1    C                 3                   2.5

或者使用以前版本的dplyr

df %>%
   group_by(id, type) %>%
   summarise(median_type_value = median(value),
     median_non_type_value =  median(df$value[df$type 
      !=cur_group()$type]), .groups = 'drop')

-输出

# A tibble: 3 × 4
  id    type  median_type_value median_non_type_value
  <chr> <chr>             <dbl>                 <dbl>
1 x1    A                     2                   3.5
2 x1    B                     4                   2.5
3 x1    C                     3                   2.5

或者使用data.table

library(data.table)
setDT(df)[, 
       {
      tmp <- .SD
     tmp[,.(median_type_value = median(value),
       median_non_type_value = median(tmp$value[tmp$type != .BY])), 
          type]
    }, id]

-输出

    id type median_type_value median_non_type_value
1: x1    A                 2                   3.5
2: x1    B                 4                   2.5
3: x1    C                 3                   2.5

关于r - 有没有一种简洁的方法来忽略几行并使用汇总函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75606759/

相关文章:

在R中不同时间复制向量中的每个元素

r - 为 r 中的每个变量按组汇总表中的数据

r - 根据第二列求和并有条件地计数

r - 根据组内的引用按组更改值

r - 在 r 中粘贴带有条件的列元素

删除函数列表中的 NAs for dplyr's across

r - 在 R 中,如何使用组合检索完整的矩阵?

R:将 t.test 包装在一个函数中

r - 来自一系列线性模型的预测值

r - Dplyr 使用字符串变量作为表达式重命名