【问题标题】:Selecting subset of columns in a data frame based on two columns from another data frame根据另一个数据框中的两列选择数据框中的列子集
【发布时间】:2019-03-03 06:17:42
【问题描述】:

我有一个庞大的患者遭遇数据集(约 600 万)。每位患者在多年内每年可能有多个条目。我希望能够根据年份安排患者,然后对他们进行编号,以便我可以过滤除每位患者之外的所有患者,以便我可以查看每位患者在特定健康计划中第一年的情况。

我能够对每个患者的第一个条目进行排名和过滤,但是我认为我必须使用 %in% 根据在新数据框中生成的两列创建一个新的 df 和子集原始数据框。这是我遇到麻烦的地方。

虽然我经常使用堆栈溢出来寻找问题的解决方案,但我通常不会发帖,所以如果我做得不好,请多多包涵。

enrolid<- c(223801,223801, 223801, 223801, 223801, 223803, 223803, 223804)

year<- c(2008, 2008, 2009, 2010, 2011, 2008, 2011, 2008)

service<- c( "CT", "Colonoscopy", "labs", "office_visit", "med", "office_vist", "hospitalization", "CT")

#But for 6 million enounters. I want to me extract the enrolid and first #year for each individual in my data set.


df1<-data.frame(enrolid, year, service)

df2<- df1 %>% 
group_by(enrolid) %>% 
  filter(rank(year, ties.method="first")==1) %>% 
  mutate(enrollment_year_num = 1) %>% 
  select(enrolid, year)`

df1 %>% 
filter_all(any_vars(. %in% df2)) #tried with df2$enrolid & df2year

谢谢!

【问题讨论】:

    标签: r filter subset


    【解决方案1】:

    您可以使用 filter 语句一步完成所有操作(确保 year 是一个数字变量,这样才能正常工作)。

    df1 %>%
     group_by(enrolid) %>%
     filter(year == min(year))
    

    【讨论】:

      【解决方案2】:

      也可以使用slice:

      df1 %&gt;% group_by(enrolid) %&gt;% slice(which.min(year))

      【讨论】:

        猜你喜欢
        • 2016-08-07
        • 1970-01-01
        • 2016-12-15
        • 2021-10-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-12-19
        相关资源
        最近更新 更多