Создать индивидуальную переменную условно - PullRequest
0 голосов
/ 11 мая 2018

Вот подмножество набора данных, который у меня есть.

 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

Этот набор данных извлечен из экономического эксперимента.Это означает, что мы провели несколько сеансов 10 апреля, в 9 и 13. Игра, в которую они играли, состояла из двух периодов, и они играли на двух разных серверах из-за разных обработок.В этом подмножестве у нас есть 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 голосов
/ 11 мая 2018

Простое решение с использованием пакета 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...