我有一个看起来像这样的数据框,我试图生成最后一列Searched
tibble::tribble( ~Group, ~Element, ~Searched,
"A", "aaa", NA,
"A", "bbb", NA,
"A", "ccc", NA,
"B", "aaa", TRUE,
"B", "bbb", TRUE,
"B", "ddd", FALSE,
"C", "aaa", TRUE,
"C", "bbb", TRUE,
"C", "ccc", FALSE )
我想我可以找到一些group_by
和lead/lag
的组合,但不确定如何。
这是tidyverse
的一种方法:
library(tidyverse)
df %>%
group_by(Group) %>%
summarise(Element = list(Element)) %>%
mutate(last_element = lag(Element),
result = map2(Element, last_element, `%in%`)) %>%
unnest(c(result, Element)) %>%
select(-last_element)
# Group Element result
# <chr> <chr> <lgl>
#1 A aaa FALSE
#2 A bbb FALSE
#3 A ccc FALSE
#4 B aaa TRUE
#5 B bbb TRUE
#6 B ddd FALSE
#7 C aaa TRUE
#8 C bbb TRUE
#9 C ccc FALSE
和base R的相似逻辑:
tmp<- split(df$Element, df$Group)
df$result <- c(mapply(`%in%`, tmp, c(NA, tmp[-length(tmp)])))