R中的面板数据:获取基于个人的完整数据案例

时间:2018-10-17 15:06:42

标签: r panel data-transform

我正在处理不平衡的面板数据集。数据来自游戏,记录中的每个用户(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排除数据,因为他在1级的得分为0。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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

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

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