Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R将假人转换为因子变量_R_Panel_Dummy Variable - Fatal编程技术网

R将假人转换为因子变量

R将假人转换为因子变量,r,panel,dummy-variable,R,Panel,Dummy Variable,我有一个面板数据集,其中时间和组变量已经转换为假人。我想将转换反向回到一个简单的id和time变量 让我们创建一个可比较的数据: library(plm) library(tidyverse) library(fastDummies) data(EmplUK) EmplUK %>% select(-sector) %>% dummy_cols(.data = .,select_columns = c("firm","year"),r

我有一个面板数据集,其中时间和组变量已经转换为假人。我想将转换反向回到一个简单的
id
time
变量

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

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)
所以基本上现在我所有的虚拟变量都是firm_X和year_X,我想再次得到year和firm变量。 由于企业1和第1年不是虚拟的,这稍微复杂一些(因为在回归模型中不需要它们)。 我很高兴没有精确的数据(我可以简单地推断第一家公司是公司1,年份是1976年,比最小的公司少一家)


有什么好办法吗?理想情况下使用tidyverse?

经过思考,我找到了它,并创建了一个小函数:

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)
getfactorback%
mutate(newgroup=ifelse(行和(cur_data()%>%select)(以(“id”)开头)==1,0,1),
newtime=ifelse(行和(cur_data()%%>%select(以(“时间”)开始))==1,0,1))%%>%
重命名(!!paste0(groupdummyprefix,firstgroup):=newgroup,
!!paste0(timedummyprefix,firsttime):=newtime)%>%
pivot_更长(cols=start_与(groupdummyprefix),names_to=grouplabel,names_prefix=groupdummyprefix)%>%
过滤器(值==1)%>%
选择(-value)%%>%
pivot_longer(cols=start_与(timedummyprefix),names_to=timelabel,names_prefix=timedummyprefix)%>%
过滤器(值==1)%>%
选择(-value)%%>%
突变(跨越(.cols=c(全部(组标签)、全部(时间标签))、因子))%>%
重新定位(全部(c(组标签,时间标签))->输出
返回(输出)
}
GetFactoryBack(数据=面板数据,
groupdummyprefix=“公司”,
grouplabel=“公司”,
timedummyprefix=“年”,
timelabel=“年”,
firstgroup=“1”,
第一次=1976年)