我正在分析一个大型数据库(描述后的片段)。为了给出一些背景,我正在分析公司的绩效,用专利和专利引用来衡量连任的CEO。
为了了解CEO们对他们公司的影响,我现在计算了列生产力(这里称为data)前三个条目的总和,以便:
今年的生产力等于今年+去年+前一年的生产力之和。
我现在要找的公式是今年的生产力,按上面的计算,可以追溯到3年前。所以,简而言之,我想把第一年的条目减去第三年(今年)的所有条目。下面是我想在excel中做的一个例子。在这个例子中,我要回到4年前!

现在,我需要通过公司和CEO ID来做这件事。正如你所看到的,并不是所有的年份都有一个条目,所以我不能总是回到过去。在这种情况下,我希望条目成为NA。
这里有一个简化的数据库
ID <- c(1,1,1,1,1,1,3,3,3,5,5,4,4,4,4,4,4,4) #CEO ID
C <- c('a','a','a','a','a','a','b','b','b','b','b','c','c','c','c','c','c','c') #Company
fyear <- c(2000, 2001, 2002,2003,2004,2005,2000, 2001,2002,2003,2004,2000, 2001, 2002,2003,2004,2005,2006)
data <- c(30,50,22,44,68,100,5,3,7,6,9,3,5,6,7,44,33,NA)
df1 <- data.frame(ID,C,fyear, data)
ID C fyear data
1 a 2000 NA
1 a 2001 50
1 a 2002 22
1 a 2003 44
1 a 2004 68
1 a 2005 100
3 b 2000 NA
3 b 2001 3
3 b 2002 7
5 b 2003 6
5 b 2004 9
4 c 2000 3
4 c 2001 5
4 c 2002 6
4 c 2003 5
4 c 2004 44
4 c 2005 33
4 c 2006 NA这是所需的输出。如你所知,对于一些首席执行官来说,所有的条目都是NAs。
ID C fyear data diff.
1 a 2000 NA NA
1 a 2001 50 NA
1 a 2002 22 NA
1 a 2003 44 -6 # 44-50
1 a 2004 68 46 # 68-22
1 a 2005 11 -33 # 11-44
3 b 2000 NA NA
3 b 2001 3 NA
3 b 2002 7 NA
5 b 2003 6 NA # here the company is the same but I'm analyzing a different CEO (ID)
5 b 2004 9 NA
4 c 2000 3 NA
4 c 2001 5 NA
4 c 2002 6 3
4 c 2003 5 0
4 c 2004 44 38
4 c 2005 33 28
4 c 2006 NA NA我试图用这里找到的一些公式来解决这个问题,但是其中一些公式不起作用(我得到了所有的0),而这些公式仍然无助于解决这样一个特定的问题。
非常感谢,我希望有人能对此发扬光大。
发布于 2022-11-23 08:31:11
这是你想要的吗?
ID <- c(1, 1, 1, 1, 1, 1, 3, 3, 3, 5, 5, 4, 4, 4, 4, 4, 4, 4) # CEO ID
C <- c("a", "a", "a", "a", "a", "a", "b", "b", "b", "b", "b", "c", "c", "c", "c", "c", "c", "c") # Company
fyear <- c(2000, 2001, 2002, 2003, 2004, 2005, 2000, 2001, 2002, 2003, 2004, 2000, 2001, 2002, 2003, 2004, 2005, 2006)
data <- c(NA, 50, 22, 44, 68, 11, NA, 3, 7, 6, 9, 3, 5, 6, 5, 44, 33, NA)
df1 <- data.frame(ID, C, fyear, data)
library(dplyr)
df1 |>
group_by(ID, C) |>
mutate(diff = data - dplyr::lag(data, 2))输出
# A tibble: 18 × 5
# Groups: ID, C [4]
ID C fyear data diff
<dbl> <chr> <dbl> <dbl> <dbl>
1 1 a 2000 NA NA
2 1 a 2001 50 NA
3 1 a 2002 22 NA
4 1 a 2003 44 -6
5 1 a 2004 68 46
6 1 a 2005 11 -33
7 3 b 2000 NA NA
8 3 b 2001 3 NA
9 3 b 2002 7 NA
10 5 b 2003 6 NA
11 5 b 2004 9 NA
12 4 c 2000 3 NA
13 4 c 2001 5 NA
14 4 c 2002 6 3
15 4 c 2003 5 0
16 4 c 2004 44 38
17 4 c 2005 33 28
18 4 c 2006 NA NAhttps://stackoverflow.com/questions/74543326
复制相似问题