繁体   English   中英

创建一个具有基于 R 中另一个变量的值的变量(面板数据)

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM