【问题标题】:In R, select rows that have one column that exists in another list在 R 中,选择一列存在于另一个列表中的行
【发布时间】:2015-12-16 23:20:10
【问题描述】:

我是 R 新手;有一个简单的绊脚石,我一直在寻找答案。

Dateframe 包含一份个人列表,其中包含他们在五年内的表现。分析需要仅包括最近一年参与的那些个人,因此我需要识别这些个人,然后从原始数据框中选择所有列的个人的所有记录(还有 50 个或更多其他列)。

原始数据帧是performance_fiveyr;我正在使用的变量是 person_id 和 year。我已经尝试了许多可能的方法来获得我需要的东西;我在这里列出了其中一种方式......

第一步是创建过去一年参与的个人列表

person_current <- subset (x = performance_fiveyr, 
                  subset = year==2015, # keep only records from 2015
                  select = person_id # keep only the person_id variable
                  )

下一步是从 performance_fiveyr 中选择 person_id 存在于 person_current 中的所有行,并返回所有其他列(总共超过 50 列)。

performance_current <- performance_fiveyr[performance_fiveyr$person_id 
                    %in% person_current, ]

我已经尝试了不止几种变体,结果要么全列无行,要么全行无变量。

【问题讨论】:

    标签: r


    【解决方案1】:

    以下是一些示例数据:

    set.seed(0)
    p5 <- data.frame(id = sample(5, 20, replace=TRUE), year = sample(2010:2015, 20, replace=TRUE))
    p5 <- p5[order(p5$id, p5$year), ]
    

    我认为你是在正确的轨道上。我认为以下内容可以满足您的需求:

    current <- unique(p5[p5$year==2015, 'id'])
    p_current <- p5[p5$id %in% current, ]
    p_current
    

    【讨论】:

    • 如此接近,却又如此遥远。非常感谢。不过,我不确定为什么我在做的事情不起作用。我发现的唯一实质性区别是您使用唯一函数而不是我使用的子集函数创建了当前个人列表。应该产生相同的结果。创建 p_current 数据帧是相同的。我将不得不研究和了解更多关于 unique 的信息,以了解它为什么有效而子集无效。再次感谢!我非常感谢。
    • 我不认为unique 有什么不同,在你的情况下它们可能已经是独一无二的。我会检查你对subset的使用。
    猜你喜欢
    • 1970-01-01
    • 2021-10-10
    • 1970-01-01
    • 2018-11-16
    • 1970-01-01
    • 2017-10-21
    • 1970-01-01
    • 2017-11-13
    • 1970-01-01
    相关资源
    最近更新 更多