У меня есть следующие данные:
library(tidyverse)
set.seed(1)
test <- data.frame(id = c(rep(1, 3), rep(2, 4), rep(3, 5)),
Year = 2000 + c(1,3,5,2,3,5,6,1,2,3,4,5),
var1 = sample(0:2, replace = TRUE, size = 12, prob = c(0.6, 0.3, 0.1)),
var2 = sample(0:2, replace = TRUE, size = 12, prob = c(0.6, 0.3, 0.1)))
Мне нужен первый год, чтобы каждая переменная (var1
и var2
) была ненулевой в каждой группе идентификаторов.
Я знаю, как найти номер строки первой ненулевой строки:
temp <- function(a) ifelse(length(head(which(a>0),1))==0,0,head(which(a>0),1))
test2 <- test %>% group_by(id) %>%
mutate_at(vars(var1:var2),funs(temp)) %>%
filter(row_number()==1) %>% select (-year)
id var1 var2
1 1 0 1
2 2 1 2
3 3 1 1
Однако я не уверен, как сопоставить номер строки с переменной года, чтобы точно знать, когда*
Это то, что я хочу:
id var1 var2
1 1 0 2001
2 2 2002 2003
3 3 2001 2001
:
var1
и
var2
стали ненулевыми?