我有一个数据框,其中包含来自多个条件下的多个实验的数据。其中每一个都有多个时期以及在这些时期中相互作用的多个主体。
我的数据如下(前五列):
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
或类似的内容。我已经在谷歌上搜索了一段时间,但仍然没有找到解决方案。
最佳答案
如果 tidyverse 不被禁止,您可以执行 group_by
,然后 arrange
,然后 mutate
选择每个组中的第一个元素。
data %>%
group_by(Experiment, Condition) %>%
arrange(E) %>%
mutate(Gnew = E[1]) %>%
ungroup() -> data
(注意:未测试)
关于r - 根据子组中的一行生成子组的标识符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51537350/