根据子组中的一行生成子组的标识符

时间:2018-07-26 11:05:55

标签: r

我有一个数据框,其中包含来自多个条件,多个实验的数据。在每个阶段中,都有多个时期以及在这些时期中相互作用的多个主体。

我的数据如下(前五列):

Experiment Condition Period Subject   E    G   GNew
     1         1        1      1     20    1     1
     1         1        1      2     60    2     2
     1         1        1      3     20    1     1
     1         1        1      4     60    2     2
     1         1        2      1     23   NA     1
     1         1        2      2     45   NA     2
     1         1        2      3     13   NA     1
     1         1        2      4     20   NA     2
     1         2        1      1     50    3     3
     1         2        1      2     50    3     3
     1         2        1      3     40    4     4
     1         2        1      4     50    3     3
     1         2        2      1     23   NA     3
     1         2        2      2     45   NA     3
     1         2        2      3     13   NA     4
     1         2        2      4     20   NA     3

我现在想生成一个变量GNew,该变量将在相同实验和条件下的第一时间段内根据值E将受试者分为几组。

我已经成功生成了列G,但是我想要得到一个像GNew这样的变量,该变量根据每个主题在第一个时期中的E值为每个主题分配一个组号,但是在每个时期。不同的实验和条件彼此独立,并且应获得不同的组号GNew,如上所示。

我可以使用嵌套的for循环来实现这一点,但是我确信可以使用aggregatebyapplydata.table或类似的方法来实现更优雅的解决方案。我已经为此搜索了一段时间,但是解决方案却使我难以理解。

1 个答案:

答案 0 :(得分:2)

如果不禁止tidyverse,则可以先进行group_by,然后进行arrange,然后进行mutate选择每个组中的第一个元素。

data %>%
    group_by(Experiment, Condition) %>% 
    arrange(E) %>%
    mutate(Gnew = E[1]) %>% 
    ungroup() -> data 

(n.b。未测试)