我有一个随着时间的推移重复测量的数据集,其中我正在寻找最大tn值的预测值。我对此后发生的措施不感兴趣。对于不同的患者,最大值出现在不同的日子。
ID day tn hb sofa
1 1 7 85 NA
1 2 NA NA NA
1 3 35 80 13
1 4 28 79 12
2 1 500 NA 12
2 2 280 80 9
2 3 140 90 8
2 4 20 90 7
3 1 60 80 12
3 2 75 75 10
3 3 NA 75 NA
3 4 55 84 7
我可以找到tn_ max:
tn_max <- df %>% group_by(record) %>% summarise(tn_max = max(tn,na.rm=TRUE))
如何在每位患者的最大tn后截断数据集? 我从以前的类似问题中找到了这段代码,但我无法让它工作错误:意外':'在“N_max = find(df(:”
) mod_df = df;
N_max = find(df(:,3) == max(df(:,3)));
N_max(1);
for N=1:size(df,3)
if df(N,1) < N_max
mod_df (N,:)=0;
end
end
mod_data_1(all(mod_data_1==0,1),:) = []
非常感谢, 安娜玛丽
答案 0 :(得分:0)
首先,我将创建一个函数,能够为任何向量返回一个相同长度的布尔向量,如果值在最大值之前出现,则其系数为TRUE
,并且{ {1}}否则:
FALSE
然后我将此函数应用于由f <- function(x) 1:length(x) <= which.max(x)
定义的tn
的每个子向量:
ID
最后,我所要做的就是采用原始数据框的相应子集:
ind <- as.logical(ave(df$tn, df$ID, FUN=f))
答案 1 :(得分:0)
你可以尝试:
df %>% group_by(ID) %>% slice(seq_len(which(tn == max(tn,na.rm=TRUE))))
Source: local data frame [6 x 5]
Groups: ID [3]
ID day tn hb sofa
(int) (int) (int) (int) (int)
1 1 1 7 85 10
2 1 2 15 84 12
3 1 3 35 80 13
4 2 1 500 76 12
5 3 1 60 80 12
6 3 2 75 75 10