Данные панели в R: Получить полные данные о случаях на основе отдельных лиц
Я работаю над несбалансированным набором данных панели. Данные пришли из игры и для каждого пользователя (user_id
) в записи у меня есть данные для каждого уровня (level
) игры. Поскольку запись данных началась через некоторое время после появления игры, для некоторых пользователей у меня нет данных относительно первых уровней, поэтому я хочу выбросить их на первом этапе.
Я попробовал функцию complete.cases, но она исключает только строки с пропущенными значениями (NA), но не данные для всего пользователя с пропущенными значениями на уровне 1.
panel <- panel[complete.cases(panel), ]
Вот почему мне нужен код, который исключает каждого пользователя, у которого нет записи на уровне 1 (что в моем наборе данных означает, что у него есть "NA" в одной из зависимых переменных, то есть в количестве действий).
Обновление № 1: Данные выглядят так (спасибо thc):
> game_data <- data.frame(player = c(1,1,1,2,2,2,3,3,3), level = c(1,2,3,1,2,3,1,2,3), score=c(0,150,170,80,100,110,75,100,0))
> game_data
player level score
1 1 1 0
2 1 2 150
3 1 3 170
4 2 1 80
5 2 2 100
6 2 3 110
7 3 1 75
8 3 2 100
9 3 3 0
Теперь я хочу исключить данные из игрока 1, потому что у него есть уровень 0 на уровне 1.
2 ответа
Я думаю, что теперь я нахожу решение с вашей помощью:
game_data %>% group_by(player) %>% filter(any(level == 1 & score > 0)) %>% as.data.frame
Кажется, это работает, и мне просто нужно было немного изменить ваш код, спасибо вам большое за помощь!
Вот один подход
Пример данных:
game_data <- data.frame(player = c(1,1,2,2,2,3,3,3), level = c(2,3,1,2,3,1,2,3), score=sample(100, 8))
> game_data
player level score
1 1 2 19
2 1 3 13
3 2 1 65
4 2 2 32
5 2 3 22
6 3 1 98
7 3 2 58
8 3 3 84
library(dplyr)
game_data %>% group_by(player) %>% filter(any(level == 1)) %>% as.data.frame
player level score
1 2 1 65
2 2 2 32
3 2 3 22
4 3 1 98
5 3 2 58
6 3 3 84