【问题标题】:Dummy Variable manipulation虚拟变量操作
【发布时间】:2023-01-31 17:49:47
【问题描述】:

假设我有以下数据集:

Year Country Tax
2000 Austria 5
2005 Belgium 21
2006 Austria 10
2001 Austria 5
2002 Austria 6
2006 Belgium 22

我想做这样的事情:

Year Country Tax Dummy
2000 Austria 5 0
2005 Belgium 21 0
2006 Austria 10 0
2001 Austria 5 0
2002 Austria 6 1
2006 Belgium 22 1

因此,如果相对于该国上一年增税,我想要一个虚拟变量。如果没有关于前一年的信息,则将其设置为零。

请注意,这是一个大型数据集,不仅适用于两个

提前致谢!

不幸的是,我不太确定从哪里开始以及如何开始

【问题讨论】:

  • 为什么 Austria 2006 不也是 1?从2002年到2006年,从6个增加到10个。
  • 因为我没有2005年的数据

标签: r statistics rstudio


【解决方案1】:
library(tidyverse)

df %>%
  arrange(Country, Year) %>%
  group_by(Country) %>%
  mutate(Dummy = case_when(Tax > lag(Tax) &
                             Year == lag(Year) + 1 ~ 1,
                           TRUE ~ 0))

# A tibble: 6 × 4
# Groups:   Country [2]
   Year Country   Tax Dummy
  <dbl> <chr>   <dbl> <dbl>
1  2000 Austria     5     0
2  2001 Austria     5     0
3  2002 Austria     6     1
4  2006 Austria    10     0
5  2005 Belgium    21     0
6  2006 Belgium    22     1

【讨论】:

    【解决方案2】:

    创建一个相同大小但滞后的数据框并与原始数据框进行比较

    df=df[order(df$Country,df$Year),]
    
    df2=df[
      ave(
        row.names(df),
        df$Country,
        FUN=function(x){
          c(head(x,1),head(x,-1))
        }
      ),
    ]
    
    df$Dummy=(df$Year==df2$Year+1 & df$Country==df2$Country & df$Tax>df2$Tax)*1L
    
      Year Country Tax rnk Dummy
    1 2000 Austria   5   1     0
    4 2001 Austria   5   2     0
    5 2002 Austria   6   3     1
    3 2006 Austria  10   4     0
    2 2005 Belgium  21   1     0
    6 2006 Belgium  22   2     1
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-07
      • 2014-01-27
      • 1970-01-01
      • 2023-03-27
      • 1970-01-01
      • 2018-04-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多