我是R语言的新手,在该特定查询上遇到了一些麻烦
我想查找(顺序)具有类型2(并且必须同时具有两种类型)的人(顺序)
Person | type | order
A1 | 1 | 1
A1 | 1 | 2
A2 | 2 | 3
A2 | 1 | 4
A2 | 2 | 5
A3 | 1 | 6
A4 | 1 | 7
A4 | 2 | 8
A5 | 1 | 9
A5 | 1 | 10
A5 | 2 | 11
在此示例中,我将使用A4
和A5
作为答案。
答案 0 :(得分:1)
您可以创建一个flag
来标识Person
在type == 1
之前出现的type == 2
。
library(dplyr)
df %>%
group_by(Person) %>%
summarise(flag = which.max(type == 1) < which.max(type == 2))
# Person flag
# <fct> <lgl>
#1 A1 FALSE
#2 A2 FALSE
#3 A3 FALSE
#4 A4 TRUE
#5 A5 TRUE
对基数R aggregate
使用相同的逻辑
df1 <- aggregate(type~Person, df, function(x) which.max(x == 1) < which.max(x == 2))
df1
# Person type
#1 A1 FALSE
#2 A2 FALSE
#3 A3 FALSE
#4 A4 TRUE
#5 A5 TRUE
然后可以子集type
来获得People
df1$Person[df1$type]
#[1] "A4" "A5"
使用基数R ave
unique(df$Person[as.logical(with(df,
ave(type, Person, FUN = function(x) which.max(x == 1) < which.max(x == 2))))])
#[1] "A4" "A5"