【问题标题】:R transform dummies into factor variableR将虚拟变量转换为因子变量
【发布时间】:2020-11-24 15:17:28
【问题描述】:

我有一个面板数据集,其中时间和组变量已经转换为虚拟变量。我想将转换反转为一个简单的idtime 变量。

让我们创建一个可比较的数据:

library(plm)
library(tidyverse)
library(fastDummies)
data(EmplUK)

EmplUK %>%
  select(-sector) %>% 
  dummy_cols(.data = .,select_columns = c("firm","year"),remove_selected_columns = TRUE,remove_first_dummy = TRUE) -> paneldata
head(paneldata)

所以基本上现在我所有的虚拟变量都是公司_X 和年份_X,我想再有一个年份和公司变量。 由于公司 1 和第 1 年不作为虚拟对象存在这一事实,这一点稍微复杂了(因为它们在回归模型中不需要)。 缺少这些精确的数据我很好(我可以简单地推断第一家公司是公司 1,而年份是 1976 年,比最小的公司少一个)。

任何想法如何很好地做到这一点?理想情况下使用 tidyverse?

【问题讨论】:

    标签: r panel dummy-variable


    【解决方案1】:

    经过一番思考,我想通了,创建了一个小函数:

    getfactorback <- function(data,
                               groupdummyprefix,
                               timedummyprefix,
                               grouplabel,
                               timelabel,
                               firstgroup,
                               firsttime) {
      
      data %>% 
        mutate(newgroup = ifelse(rowSums(cur_data() %>% select(starts_with("id")))==1,0,1),
               newtime = ifelse(rowSums(cur_data() %>% select(starts_with("time")))==1,0,1)) %>%
        
        rename(!!paste0(groupdummyprefix,firstgroup):=newgroup,
               !!paste0(timedummyprefix,firsttime):=newtime) %>%
        
        
        pivot_longer(cols = starts_with(groupdummyprefix),names_to = grouplabel,names_prefix = groupdummyprefix) %>%
        filter(value == 1) %>%
        select(-value) %>%
        
        pivot_longer(cols = starts_with(timedummyprefix),names_to = timelabel,names_prefix = timedummyprefix) %>%
        filter(value == 1) %>%
        select(-value)  %>%
        
        mutate(across(.cols = c(all_of(grouplabel),all_of(timelabel)),factor)) %>%
        relocate(all_of(c(grouplabel,timelabel))) -> output
      
      return(output)
      
    }
    
    getfactorback(data = paneldata,
                  groupdummyprefix = "firm_",
                  grouplabel = "firm",
                  timedummyprefix = "year_",
                  timelabel = "year",
                  firstgroup = "1",
                  firsttime = 1976)
    

    【讨论】:

      猜你喜欢
      • 2016-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-01
      • 1970-01-01
      相关资源
      最近更新 更多