【发布时间】:2021-02-08 18:44:20
【问题描述】:
我有一个数据集,我想在其中创建一个新变量,该变量是另一个变量的累积第二大值,我想按组执行此函数。
假设我创建了以下示例数据框:
(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 中工作的帮助将不胜感激!谢谢!
【问题讨论】:
标签: r