在第X年中,在“治疗”之后创建一个值为1的变量,否则为0

用户名

我有一个包含1995-2013年的巴西直辖市的面板数据。代码是市政ID。Nome是市政名称,而ano是采用公共政策的年份(零表示他们从未实施过该政策。)

     code                 Nome  ano
1 1100015 ALTA FLORESTA DOESTE 2010
2 1100023            ARIQUEMES 2006
3 1100031               CABIXI    0
4 1100049               CACOAL 2006
5 1100056           CEREJEIRAS 2014
6 1100064    COLORADO DO OESTE 2006

我有以下问题:

在市X于X年采用公共政策之后,我如何在R中生成虚拟变量,其值为1,否则如何生成0?

在下面,您可以以较宽的格式查看预期的输出,该输出更易于可视化。(但是,我会将数据转换为长格式以与其他数据合并。如您所见,此示例中的数据仅在2006年之后开始,否则就不会开始。)

      code                      Nome 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013
1  1100015      ALTA FLORESTA DOESTE    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    1    1    1    1
2  1100023                 ARIQUEMES    0    0    0    0    0    0    0    0    0    0    0    1    1    1    1    1    1    1    1
3  1100031                    CABIXI    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0
4  1100049                    CACOAL    0    0    0    0    0    0    0    0    0    0    0    1    1    1    1    1    1    1    1
5  1100056                CEREJEIRAS    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0
6  1100064         COLORADO DO OESTE    0    0    0    0    0    0    0    0    0    0    0    1    1    1    1    1    1    1    1

我在这个论坛中发现了类似的问题,但不是我要问的问题。

阿克伦

这是使用的选项tidyverse创建一个list具有从'ano'到2013的每个值的序列unnestlist列,创建一个1s('val')的列,并按'code','Nome'分组,complete从1995年到2013年展开数据集for,在fill不存在组合的情况下将“ val”的值设置为0,ungroup然后使用pivot_wider

library(dplyr)
library(tidyr) #1.0.0
library(purrr)
df1 %>%
   mutate(ano = case_when(between(ano, 1995, 2013) ~ 
        map(ano, ~ .x:2013), TRUE ~ list(NA_integer_))) %>% 
   unnest(ano) %>% 
   mutate(val = 1) %>%
   group_by(code, Nome) %>% 
   complete(ano = 1995:2013, fill = list(val = 0)) %>%
   ungroup %>% 
   filter(!is.na(ano)) %>%
   pivot_wider(names_from = ano, values_from = val)
# A tibble: 6 x 21
#     code Nome                 `1995` `1996` `1997` `1998` `1999` `2000` `2001` `2002` `2003` `2004` `2005` `2006` `2007` `2008` `2009` `2010` `2011` `2012` `2013`
#    <int> <chr>                 <dbl>  <dbl>  <dbl>  <dbl>  <dbl>  <dbl>  <dbl>  <dbl>  <dbl>  <dbl>  <dbl>  <dbl>  <dbl>  <dbl>  <dbl>  <dbl>  <dbl>  <dbl>  <dbl>
#1 1100015 ALTA FLORESTA DOESTE      0      0      0      0      0      0      0      0      0      0      0      0      0      0      0      1      1      1      1
#2 1100023 ARIQUEMES                 0      0      0      0      0      0      0      0      0      0      0      1      1      1      1      1      1      1      1
#3 1100031 CABIXI                    0      0      0      0      0      0      0      0      0      0      0      0      0      0      0      0      0      0      0
#4 1100049 CACOAL                    0      0      0      0      0      0      0      0      0      0      0      1      1      1      1      1      1      1      1
#5 1100056 CEREJEIRAS                0      0      0      0      0      0      0      0      0      0      0      0      0      0      0      0      0      0      0
#6 1100064 COLORADO DO OESTE         0      0      0      0      0      0      0      0      0      0      0      1      1      1      1      1      1      1      1

数据

df1 <- structure(list(code = c(1100015L, 1100023L, 1100031L, 1100049L, 
1100056L, 1100064L), Nome = c("ALTA FLORESTA DOESTE", "ARIQUEMES", 
"CABIXI", "CACOAL", "CEREJEIRAS", "COLORADO DO OESTE"), ano = c(2010L, 
2006L, 0L, 2006L, 2014L, 2006L)), class = "data.frame", row.names = c(NA, 
-6L))

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在R中编写一个函数来创建一个列,如果它是周末,则为第1行分配值,如果是工作日则为0分配值?

为什么一个int变量的值为'0xffffffff` >> 1!= 0x7fffffff?

如何生成一个二进制变量,在另一个变量的最后一个非零值之前取值为 0,在它之后取值为 1

R:如果整个组中的一个值低于某个阈值,则为整个组创建一个0或1的标志

如果列值为 1,则为下一个日期获取相同的值

桶数据,如果桶大小大于1,则将值设置为1,否则为0

单元测试时是否有一个为True的常量,否则为False?

如果一列中有任何数字,则分配总值为1,否则为0

如何使只有一个变量的值为0?

在Python中用两个变量创建一个循环,其中一个变量仅在第n个循环之后更改,而另一个变量在每个循环之后更改

对于另一个变量的第一个非NA,创建一个变量为0的变量,然后对其他值*从0开始的递增/递减操作

Ruby on Rails验证,如果一个属性为true,则不能为空,否则为空

如果N个变量中的一个以上为真,则为Python

如何为从另一个数据帧创建的变量获取1/0值(按条件)?(熊猫/ numpy)

for 循环创建一个包含 x 个条目的字典,但在循环之后,字典的长度为 < x

创建一个变量,其值为R中另一个变量的名称

如何使用现有的虚拟变量创建一个新的虚拟变量,该变量对组内的某些领先观察值取值为 1

如果组内变量的所有值都超过某个值,如何创建一个取值为 1 的虚拟变量

我想创建一个新列,其中关于 3 个组的第一行和最后一行是 2,否则为 NA

在MS Excel 2013中为另一个变量创建一个恒定的唯一值计数

c#-如果一个字段为空,则为datatable设置另一个值

创建一个新变量,直到另一个变量的第一个非NA值均为0,然后再为1(在组中)

通过从另一个列表的第n个值中减去第n + 1个值来创建列表

如何在robotframework中为嵌套变量创建一个新值/为该值分配新值?

如何创建基于另一个变量的值递增1的变量?

如何确保在 xcode 上选择第一个(第 0 个之后)段?

c ++计算两个数组的总和,如果结果为偶数则输出布尔值“0”否则为“1”如果奇数

Pytorch:如何创建一个随机整数张量,其中某个百分比是某个值?例如,25%为1,其余为0

如何创建一个从1开始的ID,该ID在排序之后每次都将另一个(字符串,时间)变量加1(分钟)?