首页 > 解决方案 > 提取包含不同列中指定值的值

问题描述

我有这个数据集:

case_number <- c("1", "1", "2", "2", "2", "3", "3")
type <- c("STD", "STD2", "STD", "STD2", "STD", "STD", "STD2")
date <- as.Date(c('2008-11-1','2009-3-25','2010-3-14','2010-10-14',
                  '2010-11-14', '2015-3-14', '2015-4-15'))

data <- data.frame(case_number,type, date)

我想知道如何提取case_number包含"STD2"按日期排序的最后一个类型的唯一性?

在这种情况下,它将是 1 和 3,因为它们将 STD2 作为按日期排序的最后一个类型。

标签: rdataframe

解决方案


如果您只想要数字,则可以使用 tapply(假设您的数据已按每个 case_number 中的日期排序)

case_nums <- with(data, tapply(type == 'STD2', case_number, tail, 1))

names(case_nums)[case_nums]
# [1] "1" "3"

如果要对这些 case_numbers 进行子集化,可以使用 dplyr

library(dplyr)

data %>% 
  group_by(case_number) %>% 
  filter(type[which.max(date)] == 'STD2')
# # A tibble: 4 x 3
# # Groups:   case_number [2]
#   case_number type  date      
#   <fct>       <fct> <date>    
# 1 1           STD   2008-11-01
# 2 1           STD2  2009-03-25
# 3 3           STD   2015-03-14
# 4 3           STD2  2015-04-15

推荐阅读