这是我拥有的数据集的子集。
Date Time Period Server Subject Indiv
1004 9 1 1 1 NA
1004 9 1 1 2 NA
1004 9 1 2 1 NA
1004 9 1 2 2 NA
1004 9 2 1 1 NA
1004 9 2 1 2 NA
1004 9 2 2 1 NA
1004 9 2 2 2 NA
1004 13 1 1 1 NA
1004 13 1 1 2 NA
1004 13 1 2 1 NA
1004 13 1 2 2 NA
1004 13 2 1 1 NA
1004 13 2 1 2 NA
1004 13 2 2 1 NA
1004 13 2 2 2 NA
此数据集是从经济实验中提取的。这意味着我们在4月10日9点和13点进行了一些会话。他们玩的游戏包含2个周期,并且由于不同的处理方式,他们在两个不同的服务器上玩。 在这个子集中,我们有8个不同的人(在真实的一个中,我有96个)。 第一行中的主题1也是第五行的主题,因为他在9上比赛,并且在服务器1上。但是他与在服务器2上玩的人不同(第3和第7行)。
所以我想创建一个“个体变量”来识别每个主题并创建一个面板数据集(但我的编程能力是有限的)。
以下是我想为所有96个人提供的结果的概述。
Date Time Period Server Subject Indiv
1004 9 1 1 1 1
1004 9 1 1 2 2
1004 9 1 2 1 3
1004 9 1 2 2 4
1004 9 2 1 1 1
1004 9 2 1 2 2
1004 9 2 2 1 3
1004 9 2 2 2 4
1004 13 1 1 1 5
1004 13 1 1 2 6
1004 13 1 2 1 7
1004 13 1 2 2 8
1004 13 2 1 1 5
1004 13 2 1 2 6
1004 13 2 2 1 7
1004 13 2 2 2 8
感谢您的帮助!
答案 0 :(得分:4)
使用data.table
包的简单解决方案可能是:
library(data.table)
df$Indiv <- as.integer(df$Indiv)
setDT(df)[, Indiv := .GRP, by = .(Time, Server, Subject)]
df
# Date Time Period Server Subject Indiv
# 1: 1004 9 1 1 1 1
# 2: 1004 9 1 1 2 2
# 3: 1004 9 1 2 1 3
# 4: 1004 9 1 2 2 4
# 5: 1004 9 2 1 1 1
# 6: 1004 9 2 1 2 2
# 7: 1004 9 2 2 1 3
# 8: 1004 9 2 2 2 4
# 9: 1004 13 1 1 1 5
#10: 1004 13 1 1 2 6
#11: 1004 13 1 2 1 7
#12: 1004 13 1 2 2 8
#13: 1004 13 2 1 1 5
#14: 1004 13 2 1 2 6
#15: 1004 13 2 2 1 7
#16: 1004 13 2 2 2 8
或者如果您更喜欢dplyr
:
library(dplyr)
df$Indiv <- df %>% group_indices(Time, Server, Subject)