【问题标题】:Create an individual variable conditionally有条件地创建单个变量
【发布时间】:2018-05-11 14:03:41
【问题描述】:

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

 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 

【问题讨论】:

    标签: r database loops


    【解决方案1】:

    使用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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-08-13
      • 2023-03-15
      • 1970-01-01
      • 2022-01-08
      • 2021-12-11
      • 2013-02-07
      • 2015-06-19
      相关资源
      最近更新 更多