R 分组将一个变量分成多个变量

R 分组将一个变量分成多个变量,r,R,为了在我的felm固定效应估计中包括特定于州的年度趋势,我想为每个州创建一个单独的变量,第一年的值为1,第二年的值为2,依此类推,所有其他州的值为0。 我设法创建了一个变量(“示例中的stateyear”)来满足所有这些要求,但它只是所有州的一个变量(参见示例)。是否有办法将该变量按组(state_geocode_id)拆分为多个变量,并将除各自国家外的所有其他国家的每个变量设置为0 简化数据集: d <- data.frame("100") names(d) <- "state_g

为了在我的felm固定效应估计中包括特定于州的年度趋势,我想为每个州创建一个单独的变量,第一年的值为1,第二年的值为2,依此类推,所有其他州的值为0。 我设法创建了一个变量(“示例中的stateyear”)来满足所有这些要求,但它只是所有州的一个变量(参见示例)。是否有办法将该变量按组(state_geocode_id)拆分为多个变量,并将除各自国家外的所有其他国家的每个变量设置为0

简化数据集:

d <- data.frame("100")
names(d) <- "state_geocode_id"
d$state_geocode_id <- as.character(d$state_geocode_id)
d <- rbind(d, "100", "100", "100", "101", "101", "101", "101", "102", "102", "102", "102")
d$municip <- c("1", "1", "2", "2", "3", "3", "4", "4", "5", "5", "6", "6")
d$year <- c("2000", "2001", "2000", "2001","2000", "2001", "2000", "2001", "2000", "2001", "2000", "2001")
d像这样

library(tidyverse)

d %>% 
  group_by(state_geocode_id) %>% 
  #add a row counter and duplicate the state id
  mutate(row = row_number(), 
         state2 = state_geocode_id) %>% 
  #now spread by the duplicate state to get a column for each state
  spread(key = state2, value = row, fill = 0)

# A tibble: 12 x 6
# Groups:   state_geocode_id [4]
state_geocode_id year  `100` `101` `102` `103`
<chr>            <chr> <dbl> <dbl> <dbl> <dbl>
1 100              2000      1     0     0     0
2 100              2001      2     0     0     0
3 100              2002      3     0     0     0
4 101              2000      0     1     0     0
5 101              2001      0     2     0     0
6 101              2002      0     3     0     0
7 102              2000      0     0     1     0
8 102              2001      0     0     2     0
9 102              2002      0     0     3     0
10 103              2000      0     0     0     1
11 103              2001      0     0     0     2
12 103              2002      0     0     0     3
库(tidyverse)
d%>%
分组依据(州地理编码id)%>%
#添加行计数器并复制状态id
变异(行=行编号(),
state2=州\地理代码\ id)%>%
#现在按复制状态展开以获得每个状态的列
排列(键=状态2,值=行,填充=0)
#一个tibble:12x6
#组别:州地理编码[4]
州地理编码id年份'100``101``102``103`
1 100              2000      1     0     0     0
2 100              2001      2     0     0     0
3 100              2002      3     0     0     0
4 101              2000      0     1     0     0
5 101              2001      0     2     0     0
6 101              2002      0     3     0     0
7 102              2000      0     0     1     0
8 102              2001      0     0     2     0
9 102              2002      0     0     3     0
10 103              2000      0     0     0     1
11 103              2001      0     0     0     2
12 103              2002      0     0     0     3
像这样吗

library(tidyverse)

d %>% 
  group_by(state_geocode_id) %>% 
  #add a row counter and duplicate the state id
  mutate(row = row_number(), 
         state2 = state_geocode_id) %>% 
  #now spread by the duplicate state to get a column for each state
  spread(key = state2, value = row, fill = 0)

# A tibble: 12 x 6
# Groups:   state_geocode_id [4]
state_geocode_id year  `100` `101` `102` `103`
<chr>            <chr> <dbl> <dbl> <dbl> <dbl>
1 100              2000      1     0     0     0
2 100              2001      2     0     0     0
3 100              2002      3     0     0     0
4 101              2000      0     1     0     0
5 101              2001      0     2     0     0
6 101              2002      0     3     0     0
7 102              2000      0     0     1     0
8 102              2001      0     0     2     0
9 102              2002      0     0     3     0
10 103              2000      0     0     0     1
11 103              2001      0     0     0     2
12 103              2002      0     0     0     3
库(tidyverse)
d%>%
分组依据(州地理编码id)%>%
#添加行计数器并复制状态id
变异(行=行编号(),
state2=州\地理代码\ id)%>%
#现在按复制状态展开以获得每个状态的列
排列(键=状态2,值=行,填充=0)
#一个tibble:12x6
#组别:州地理编码[4]
州地理编码id年份'100``101``102``103`
1 100              2000      1     0     0     0
2 100              2001      2     0     0     0
3 100              2002      3     0     0     0
4 101              2000      0     1     0     0
5 101              2001      0     2     0     0
6 101              2002      0     3     0     0
7 102              2000      0     0     1     0
8 102              2001      0     0     2     0
9 102              2002      0     0     3     0
10 103              2000      0     0     0     1
11 103              2001      0     0     0     2
12 103              2002      0     0     0     3

非常感谢您的快速回复,这正是我想要的。我稍微修改了示例数据集,因为我实际上有一个子州级别(自治市),但根据州地理编码id进行分组,年份使解决方案足够通用,足以说明这一点。非常感谢您的快速响应,这正是我想要的。我稍微修改了示例数据集,因为我实际上有一个子州级别(自治市),但根据州地理编码id进行分组,年份使解决方案具有足够的通用性。