我有一个如下所示的数据框:
person year Office Job rank
Harry 2002 Los Angeles CEO 0
Harry 2006 Boston CEO 0
Harry 2006 Los Angeles Advisor 1
Harry 2006 Chicago Chairman 2
Peter 2001 New York Director 0
Peter 2001 Chicago CFO 1
Peter 2001 Chicago COO 2
Peter 2002 Chicago CEO 0
Lily 2005 Springfield CEO 0
Lily 2007 New York CFO 0
Lily 2008 Boston COO 0
Lily 2011 Chicago Advisor 0
Lily 2011 New York board 1
Sam 2006 Chicago COO 0
Sam 2007 Chicago CFO 0
Sam 2007 Chicago CEO 1
Sam 2010 New York Advisor 0
我想知道在个人层面上,谁至少具有以下两种模式中的一种:
在上一个可用年份,一个办公室的等级为 0,在下一个可用年份,该办公室仍然存在,但等级不再并且应该大于 0(工作无关紧要)。例如,哈利的洛杉矶。
在下一个可用年份,办公室的排名为 0,而在上一个可用年份,该办公室仍然存在,但排名不再且应大于 0(例如,彼得的芝加哥)。< /p>
请注意,纽约对于 Lily 来说没有上述任何一种情况,因为 2007 年不是 Lily 的前一个可用年份(2008 年是)。
请注意,一个办公室可以在一年内多次出现(工作不同)。山姆的芝加哥展示了一个这样的案例。请注意,虽然芝加哥在 2007 年排名第 1,但在上一个可用年份排名第 0,但芝加哥在 2007 年也排名第 0。
因此,输出应如下所示:
person yes/no
Harry 1
Peter 1
Lily 0
Sam 0
答案 0 :(得分:1)
如果我理解正确,我认为这会奏效。你想:
library(tidyverse)
df <- read_table(
"person year Office Job rank
Harry 2002 Los Angeles CEO 0
Harry 2006 Boston CEO 0
Harry 2006 Los Angeles Advisor 1
Harry 2006 Chicago Chairman 2
Peter 2001 New York Director 0
Peter 2001 Chicago CFO 1
Peter 2001 Chicago COO 2
Peter 2002 Chicago CEO 0
Lily 2005 Springfield CEO 0
Lily 2007 New York CFO 0
Lily 2008 Boston COO 0
Lily 2011 Chicago Advisor 0
Lily 2011 New York board 1
Sam 2006 Chicago COO 0
Sam 2007 Chicago CFO 0
Sam 2007 Chicago CEO 1
Sam 2010 New York Advisor 0
"
)
df %>%
group_by(person, year, Office) %>%
summarise(any_rank_0 = any(rank == 0)) %>%
ungroup() %>%
complete(nesting(person, year), Office) %>%
arrange(person, Office, year) %>%
group_by(person, Office) %>%
mutate(
case_1 = any_rank_0 & !lead(any_rank_0), #current 0, next not 0
case_2 = any_rank_0 & !lag(any_rank_0) #current 0, previous not 0
) %>%
group_by(person) %>%
summarise(result = replace_na(any(case_1) | any(case_2), FALSE))
#> # A tibble: 4 x 2
#> person result
#> <chr> <lgl>
#> 1 Harry TRUE
#> 2 Lily FALSE
#> 3 Peter TRUE
#> 4 Sam FALSE
由 reprex package (v1.0.0) 于 2021 年 5 月 20 日创建