[英]How to split a panel data record in R based on a threshold value for a variable?
[英]Creating a variable that has a value based on another variable in R (panel data)
我有一个 dataframe 包含 2012-2020 年期间专利和经济信息的面板数据。 我有一个时间不变变量, investment_year ,它是某家公司获得初始投资的年份。 专利申请是某家公司每年提交的专利数量。 以A公司为例,2018年申请专利5项,2019年申请2项,以此类推。
company_name investment_year year patent_applications A 2018 2020 7 A 2018 2019 2 A 2018 2018 5 . . . . . . . . . . . . A 2018 2012 4 B 2015 2020 10 B 2015 2019 3 B 2015 2018 7 . . . . . . . . . . . .
我想创建一个变量,其中包含 t+2 时的申请数量,其中 t 是投资年份。 因此,例如,对于 A 公司,t+2 ( patent_applications_t2 ) 的申请数量为 7,因为其投资年 (2018) + 2 等于 2020。
我尝试了下面的代码行,但它没有产生正确的结果。
df$patent_applications_t2 <- df$patent_applications[df$Year == df$Investment_Year + 2]
必须有更好的方法来完成您正在寻找的东西。 我得到了以下内容。
library(tidyverse)
tbl <- tribble(~company_name, ~investment_year, ~year, ~patent_applications,
"A", 2018, 2020, 7,
"A", 2018, 2019, 2,
"A", 2018, 2018, 5,
"A", 2018, 2012, 4,
"B", 2015, 2020, 10,
"B", 2015, 2019, 3,
"B", 2015, 2018, 7
)
tbl %>% group_by(company_name) %>%
arrange(investment_year,year) %>%
mutate(t2 = ifelse(year - investment_year <= 1 & year - investment_year >=0, 1, 0)) %>%
mutate(cumulative_application = t2*cumsum(patent_applications*t2)) %>%
ungroup() %>%
arrange(company_name) %>%
select(company_name,investment_year,year,patent_applications,cumulative_application)
你得到这个结果:
# A tibble: 7 x 5
company_name investment_year year patent_applications cumulative_application
<chr> <dbl> <dbl> <dbl> <dbl>
1 A 2018 2012 4 0
2 A 2018 2018 5 5
3 A 2018 2019 2 7
4 A 2018 2020 7 0
5 B 2015 2018 7 0
6 B 2015 2019 3 0
7 B 2015 2020 10 0
我选择显示累积应用程序,但您可以轻松地只显示第二个条目。
另一种解决方案(可能更好)是使用 inside within()
创建一个 function 。 希望这对您有所帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.