Данные панели в R: Получить полные данные о случаях на основе отдельных лиц - PullRequest
0 голосов
/ 17 октября 2018

Я работаю над несбалансированным набором данных панели.Данные пришли из игры, и для каждого пользователя (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 ]

0 голосов
/ 18 октября 2018

Я думаю, что теперь я нахожу решение с вашей помощью:

game_data %>% group_by(player) %>% filter(any(level == 1 & score > 0)) %>% as.data.frame

Кажется, это работает, и мне просто нужно немного изменить ваш код, спасибо вам большое за помощь!

0 голосов
/ 17 октября 2018

Вот один подход

Пример данных:

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
...