【发布时间】:2016-04-04 23:49:22
【问题描述】:
我想将某些值复制到一行中,然后根据共同因素将它们返回到另一行。 在这里,在每个试验中都有两个人(一个受试者和一个对手),我只记录了受试者的数据。我想“反转”主题的数据并将其粘贴到适当的行中 - 即主题是对手的位置。
一个示例数据集:
df = data.frame(
section = section,
trial = c(rep(c(rep("trial1",2), rep("trial2",2)),2)),
subject = rep(subjects,2),
rank = c(rep(c(1,4,2,3),2)),
count.given = rnorm(8, m=5, sd = 3),
opponent = rep(NA,(length(section))),
opponent.rank = rep(NA,(length(section))),
count.received = rep(NA,(length(section))))
这里是df:
section trial subject rank count.given opponent opponent.rank count.received
1 1 trial1 a 1 11.0552711 NA NA NA
2 1 trial1 b 4 4.8118577 NA NA NA
3 1 trial2 c 2 8.9146090 NA NA NA
4 1 trial2 d 3 11.8599362 NA NA NA
5 2 trial1 a 1 0.8334179 NA NA NA
6 2 trial1 b 4 4.1636337 NA NA NA
7 2 trial2 c 2 4.6000360 NA NA NA
8 2 trial2 d 3 6.9078512 NA NA NA
现在我的目标是用来自同一部分和同一试验的适当数据填充对手列。例如,第一行对应第 1 部分,试验 1,和主题“a”;因此,反对者是第 1 节,审判 1,以及主题“b”。反之亦然:“a”是第二行的对手。
目标是更新df如下:
section trial subject rank count.given opponent opponent.rank count.received
1 1 trial1 a 1 11.0552711 b 4 4.8118577
2 1 trial1 b 4 4.8118577 a 1 11.0552711
3 1 trial1 c 2 8.9146090 d 3 11.8599362
4 1 trial1 d 3 11.8599362 c 2 8.9146090
5 2 trial2 a 1 0.8334179 b 4 4.1636337
6 2 trial2 b 4 4.1636337 a 1 0.8334179
7 2 trial2 c 2 4.6000360 d 3 6.9078512
8 2 trial2 d 3 6.9078512 c 2 4.6000360
我认为最好的方法是按部分和试验对 df 进行排序,然后为每个试验创建一个对应于 [i] 和 [i+1] 的索引。然后来自 [i] 的主题数据被粘贴到 [i+1] 的对手数据中,反之亦然。任何帮助深表感谢。
【问题讨论】: