标识r中前一组的元素

  • 本文关键字:一组 元素 标识 r dplyr
  • 更新时间 :
  • 英文 :


我有一个看起来像这样的数据框,我试图生成最后一列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_bylead/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)])))

最新更新