首页 文章

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

提问于
浏览
0

我正在研究一个不 balancer 的面板数据集 . 数据来自游戏,对于记录中的每个用户( user_id ),我都有游戏的每个级别( level )的数据 . 由于录制数据在游戏推出后的某个时间开始,对于一些用户来说,我不知道为什么我想在第一步中将它们抛弃 .

我已经尝试了complete.cases-function,但它只排除了缺少值(NAs)的行,但没有排除级别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

    这是一种方法

    示例数据:

    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
    
  • 0

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

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

    这似乎有用,我只需要从您的代码中稍作调整,非常感谢您的帮助!

相关问题