Данные панели в 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
Другие вопросы по тегам