在最大值

时间:2016-05-06 12:38:45

标签: r truncate validateset

我有一个随着时间的推移重复测量的数据集,其中我正在寻找最大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),:) = []

非常感谢, 安娜玛丽

2 个答案:

答案 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