我有一个数据框,其中包含来自多个条件,多个实验的数据。在每个阶段中,都有多个时期以及在这些时期中相互作用的多个主体。
我的数据如下(前五列):
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循环来实现这一点,但是我确信可以使用aggregate
,by
,apply
,data.table
或类似的方法来实现更优雅的解决方案。我已经为此搜索了一段时间,但是解决方案却使我难以理解。
答案 0 :(得分:2)
如果不禁止tidyverse,则可以先进行group_by
,然后进行arrange
,然后进行mutate
选择每个组中的第一个元素。
data %>%
group_by(Experiment, Condition) %>%
arrange(E) %>%
mutate(Gnew = E[1]) %>%
ungroup() -> data
(n.b。未测试)