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)]]
我将第一次出现定义为在当前时期观察到一个变量,但在之前的时期没有观察到(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)]]