0

我正在研究一个不平衡的面板数据集。数据来自游戏,对于user_id记录中的每个用户 ( ),我都有游戏每个级别 ( level) 的数据。由于在游戏推出一段时间后开始记录数据,对于一些用户我没有关于第一关的数据,这就是为什么我想在第一步中将它们扔掉。

我已经尝试了 complete.cases-function,但它只排除了具有缺失值 (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 中排除数据,因为他在级别 1 中的得分为 0。

4

2 回答 2

0

我想我现在在您的帮助下找到了解决方案:

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

这似乎可行,我只需要对您的代码进行一些调整,非常感谢您的帮助!

于 2018-10-18T09:49:03.647 回答
0

这是一种方法

示例数据:

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
于 2018-10-17T16:13:50.000 回答