Сгенерировать фиктивную переменную, удовлетворяющую условию для того же человека на панели данных панели - PullRequest
0 голосов
/ 25 мая 2019

У меня есть фрейм данных этой формы

ID panelid dummy1 dummy2
1  1       0      1
1  2       1      0
2  1       1      0
2  2       0      1
3  1       1      0
3  2       1      0
4  1       0      1
4  2       0      1

Я хочу сгенерировать фиктивную переменную, равную единице в случае panelid == 2, и только если один и тот же человек представляет значение для фиктивной переменной 1, равное1 в panelid == 1 и значение для dummy2, равное 1 в panelid == 2.Поэтому я хочу получить что-то вроде этого

    ID panelid dummy1 dummy2 result
    1  1       0      1      0
    1  2       1      0      0
    2  1       1      0      0
    2  2       0      1      1
    3  1       1      0      0
    3  2       1      0      0
    4  1       0      1      0
    4  2       0      1      0

Может ли кто-нибудь помочь мне с этим?

Большое спасибо всем

Ответы [ 2 ]

1 голос
/ 25 мая 2019

Это решение практически идентично решению Коула.

dataset <- read.table(text = 'ID panelid dummy1 dummy2
1  1       0      1
1  2       1      0
2  1       1      0
2  2       0      1
3  1       1      0
3  2       1      0
4  1       0      1
4  2       0      1',
                      header = TRUE)

temp_ID <- dataset$ID[(dataset$panelid == 1) & (dataset$dummy1 == 1)]
dataset$result <- as.integer(x = ((dataset$panelid == 2) & (dataset$dummy2 == 1) & (dataset$ID %in% temp_ID)))

dataset

  ID panelid dummy1 dummy2 result
1  1       1      0      1      0
2  1       2      1      0      0
3  2       1      1      0      0
4  2       2      0      1      1
5  3       1      1      0      0
6  3       2      1      0      0
7  4       1      0      1      0
8  4       2      0      1      0
0 голосов
/ 25 мая 2019

Вот базовый подход R:

dummy1_in_panelid <- with(df, ID[panelid == 1 & dummy1 == 1])

#initialize
df$result <- 0

df$result[with(df, which(panelid == 2 & ID %in% dummy1_in_panelid & dummy2 == 1))] <- 1
df

  ID panelid dummy1 dummy2 result
1  1       1      0      1      0
2  1       2      1      0      0
3  2       1      1      0      0
4  2       2      0      1      1
5  3       1      1      0      0
6  3       2      1      0      0
7  4       1      0      1      0
8  4       2      0      1      0

И данные ...

df <- as.data.frame(data.table::fread('
ID panelid dummy1 dummy2
1  1       0      1
1  2       1      0
2  1       1      0
2  2       0      1
3  1       1      0
3  2       1      0
4  1       0      1
4  2       0      1'))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...