根据两列和正在运行的ID过滤行

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了根据两列和正在运行的ID过滤行相关的知识,希望对你有一定的参考价值。

我需要根据第一个城市和位置名称基于两列限制数据。我想获得FirstPlace为1且第一个城市为伦敦的所有行。有关如何做到这一点的任何建议?在这种情况下,该示例应显示约翰的所有行,因为他在伦敦居住的第一年。

year <- c(2008, 2009, 2010, 2009, 2010, 2011)
person <- c('John', 'John', 'John', 'Brian', 'Brian','Vickey')
location <- c('London','Paris', 'Newyork','Paris','Paris','Miami')
df <- data.frame(year, person, location)

library(dplyr)
df %>% group_by(person) %>% mutate(FirstPlace = +(min(year) == year))
答案

使用data.table

library(data.table)
setDT(df)[order(year), if(first(location) == 'London') .SD, by = person]

这使:

   person year location
1:   John 2008   London
2:   John 2009    Paris
3:   John 2010  Newyork

或者与dplyr

library(dplyr)
df %>% 
  arrange(year) %>% 
  group_by(person) %>% 
  filter(first(location) == 'London')

以上是关于根据两列和正在运行的ID过滤行的主要内容,如果未能解决你的问题,请参考以下文章

如何在C中声明具有两列和未知行数的矩阵

如何过滤视图两列 OR 而不是 AND?

如何使用窗口函数根据奇偶行号过滤掉结果,没有现有列作为行ID

如何根据唯一列和单独列中的最高量过滤结果集?

如何在Mysql中组合两列和group_concat

R - 根据两列识别和删除重复行