r - 在 R 中查找每组的累积第二最大值

标签 r

我有一个数据集,我想在其中创建一个新变量,该变量是另一个变量的累积第二大值,并且我想按组执行此功能。
假设我创建了以下示例数据框:

(df1 <- data.frame(patient = rep(1:5, each=8), visit = rep(1:2,each=4,5), trial = rep(1:4,10), var1 = sample(1:50,20,replace=TRUE)))
这是假装数据,代表 5 名患者,每人有 2 次研究访问,每次访问有 4 次试验,并进行了测量 (var1)。
> head(df1,n=20)
   patient visit trial var1
1        1     1     1   25
2        1     1     2   23
3        1     1     3   48
4        1     1     4   37
5        1     2     1   41
6        1     2     2   45
7        1     2     3    8
8        1     2     4    9
9        2     1     1   26
10       2     1     2   14
11       2     1     3   41
12       2     1     4   35
13       2     2     1   37
14       2     2     2   30
15       2     2     3   14
16       2     2     4   28
17       3     1     1   34
18       3     1     2   19
19       3     1     3   28
20       3     1     4   10
我想创建一个新变量 cum2ndmax,它是 var1 的累积第二最大值,我想按患者 # 和访问 # 对该变量进行分组。
我想出了如何计算累积的第二个最大值,如下所示:
df1$cum2ndmax <- sapply(seq_along(df1$var1),function(x){sort(df1$var1[seq(x)],decreasing=TRUE)[2]})
df1
但是,这会计算整个数据集的累积第二最大值,而不是每个组。在安装和加载包 dplyr 之后,我尝试使用分组数据来计算这个变量:
library(dplyr)    
df2 <- df1 %>%
        group_by(patient,visit) %>%
        mutate(cum2ndmax = sapply(seq_along(df1$var1),function(x){sort(df1$var1[seq(x)],decreasing=TRUE)[2]}))
但我收到一个错误:错误:mutate() 的问题输入 cum2ndmax . x 输入 cum2ndmax不能回收到尺寸 4。
理想情况下,我的结果应该是这样的:
patient visit   trial   var1    cum2ndmax
1   1   1   25  NA
1   1   2   23  23
1   1   3   48  25
1   1   4   37  37
1   2   1   41  NA
1   2   2   45  41
1   2   3   8   41
1   2   4   9   41
2   1   1   26  NA
2   1   2   14  14
2   1   3   41  26
2   1   4   35  35
…   …   …   …   …
任何帮助使其在 R 中工作的帮助将不胜感激!谢谢!

最佳答案

dplyrpurrr选项可以是:

df1 %>%
 group_by(patient, visit) %>%
 mutate(cum_second_max = map_dbl(.x = seq_along(var1),
                                 ~ ifelse(.x == 1, NA, var1[dense_rank(-var1[1:.x]) == 2])))

   patient visit trial  var1 cum_second_max
     <int> <int> <int> <int>          <dbl>
 1       1     1     1    25             NA
 2       1     1     2    23             23
 3       1     1     3    48             25
 4       1     1     4    37             37
 5       1     2     1    41             NA
 6       1     2     2    45             41
 7       1     2     3     8             41
 8       1     2     4     9             41
 9       2     1     1    26             NA
10       2     1     2    14             14
11       2     1     3    41             26
12       2     1     4    35             35
13       2     2     1    37             NA
14       2     2     2    30             30
15       2     2     3    14             30
16       2     2     4    28             30
17       3     1     1    34             NA
18       3     1     2    19             19
19       3     1     3    28             28
20       3     1     4    10             28

关于r - 在 R 中查找每组的累积第二最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64538324/

相关文章:

r - 使用 R 将字符串拆分为多列可变长度

perl - 如何将稀疏矩阵从 Perl 传递到 R?

r - 使用R查找昨天的日期

R - 检查文件是否打开/关闭以及由哪个用户打开/关闭

删除因子水平为 1 的变量

r - 如何在 ggplot2 条形图中添加图例

R:根据数据矩阵和阈值数据框创建 boolean 矩阵

r - 达到阈值时 dplyr 重置计数器

r - 使用data.table的简单频率表

R 从列表中删除子列表中的项目