有条件地创建单个变量

时间:2018-05-11 14:03:41

标签: r database loops

这是我拥有的数据集的子集。

 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

感谢您的帮助!

1 个答案:

答案 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)