R 中是否有任何解决方案可以将 TRUE/FALSE 分配给第一次出现(观察当前时期而不是之前的时期)

Is there any solution in R to assign TRUE/FALSE to first occurrence (observed the current period and not the one before)

我将第一次出现定义为在当前时期观察到一个变量,但在之前的时期没有观察到(1个时期相当于1年)。

因此,在下面的示例中,我想检查公司产品 V3(第三列)是否是第一次观察(按照我之前给出的定义),同时考虑到时间变量 V2 (第二列)。

a <- as.data.frame(matrix(c(1,1,1,1,1,2005,2006,2007,2009,2010, "A", "B", "A", "A", "A"), ncol = 3))

我想创建一个新的列指标(解决方案是 V4)来解释第一次出现(当前期间的观察,在之前的期间没有观察到,)

b <- as.data.frame(matrix(c(1,1,1,1,1,2005,2006,2007,2009,2010, "A", "B", "A", "A", "A","TRUE", "TRUE", "TRUE", "TRUE", "FALSE"), ncol = 4))

我尝试过使用 min() 函数以及疯狂循环。但是我没有想出合适的解决方案。

注:V1代表公司id。在我的数据库中,我有数千家不同的公司

有线索吗?

此致

如果我没理解错的话。尝试这样做

library(tidyverse)
a %>% 
  group_by(V2, V3) %>% 
  mutate(V4 = row_number() == 1)

您正在寻找:

a$V4 <- !duplicated(a)

使用data.table的选项:

library(data.table)
DT <- fread("Company Year Product
1 2005  A
1 2006  B
1 2007  A
1 2009  A
1 2010  A")

DT[, yearBef := Year - 1L]
DT[, NotInLastYear := DT[DT, on=.(Company, Product, Year=yearBef), 
    fcoalesce(x.Year==i.Year, TRUE)]]