【问题标题】:Creating a variable that has a value based on another variable in R (panel data)创建一个变量,该变量的值基于 R 中的另一个变量(面板数据)
【发布时间】:2022-01-03 16:46:42
【问题描述】:

我有一个数据框,其中包含 2012-2020 年的专利和经济信息面板数据。数据变量是:

investment_year时不变变量,即某家公司获得初始投资的年份;

patent_applications是某家公司每年申请的专利数量。以 A 公司为例,2018 年申请了 5 项专利,2019 年申请了 2 项,以此类推。

公司名称投资年份年份专利申请 2018 2020 7 2018 2019 2 2018 2018 5 . . . . . . . . . . . . 2018 2012 4 乙 2015 2020 10 B 2015 2019 3 B 2015 2018 7 . . . . . . . . . . . .

我想创建一个变量,其中包含t+2 的申请数量,其中t 是投资年份。

因此,例如,对于Company At+2(例如patent_applications_t2)的申请数量将是7,作为其投资年份(2018) + 2 equals 2020.

我尝试了下面的代码行,但它没有产生正确的结果。

df$patent_applications_t2 <- df$patent_applications[df$Year == df$Investment_Year + 2]

【问题讨论】:

标签: r dataframe panel-data


【解决方案1】:

必须有更好的方法来完成您正在寻找的东西。我得到了以下内容。

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

我选择显示累积应用,但您可以轻松地只显示第二个条目。

另一个解决方案(可能更好)是使用within() 创建一个函数。希望对您有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-23
    • 2019-09-01
    • 1970-01-01
    • 2019-07-31
    • 1970-01-01
    相关资源
    最近更新 更多