如何在R中的NAs之后生成虚拟变量

时间:2018-05-26 07:26:19

标签: r dplyr data.table plyr

我正在尝试使用以下规则生成虚拟变量

For DV in Data:    
    set: Flag "1" for all NA in DV
    set: Flag "0" otherwise

示例数据集如下所示,

year    country DV
1990    Bahamas 2
1991    Bahamas NA
1992    Bahamas NA
1993    Bahamas 0
1994    Bahamas 1
1995    Bahamas 2
1996    Bahamas NA
1997    Bahamas 2
1998    Bahamas NA
1999    Bahamas 2
2000    Bahamas NA
2001    Bahamas 1
2002    Bahamas NA
2003    Bahamas 1
2004    Bahamas NA
2005    Bahamas 2
2006    Bahamas NA
2007    Bahamas 0
2008    Bahamas 1
2009    Bahamas 2
2010    Bahamas NA
2011    Bahamas 2

从上面提到的规则中可以看出,Flags的设置如下所示,

year    country DV  Flag
1990    Bahamas 2   0
1991    Bahamas NA  0
1992    Bahamas NA  0
1993    Bahamas 0   1
1994    Bahamas 1   0
1995    Bahamas 2   0
1996    Bahamas NA  0
1997    Bahamas 2   1
1998    Bahamas NA  0
1999    Bahamas 2   1
2000    Bahamas NA  0
2001    Bahamas 1   1
2002    Bahamas NA  0
2003    Bahamas 1   1
2004    Bahamas NA  0
2005    Bahamas 2   1
2006    Bahamas NA  0
2007    Bahamas 0   1
2008    Bahamas 1   0
2009    Bahamas 2   0
2010    Bahamas NA  0
2011    Bahamas 2   1

需要说明的是,标记仅根据 DV 列设置,无论DV之后是什么。

我目前正在尝试这样做: data$Flag <- ave(data$country, data$DV, FUN = function(x) if (max(x) == NA) 1 else 0)

显然这看起来不正确,我知道这一点。这里的任何帮助将不胜感激。

感谢。

3 个答案:

答案 0 :(得分:2)

怎么样

data$X <- 0
data$X[which(is.na(data$DV)) + 1] <- !is.na(data$DV[which(is.na(data$DV)) + 1])

答案 1 :(得分:1)

您可以获取#include<stdio.h> #include<conio.h> int main(int argc,char *argv[]) { float Diameter=atoi(argv[1]); float radius=D/2; float area=(radius*radius)*3.14; printf("The area is %0.2f",area); return 0; } 生成的逻辑向量的差值,并将其等于-1。这将为您提供从NA到非NA的变化位置。

is.na()

答案 2 :(得分:1)

可以使用dplyr::lag检查DV的前一个值是NA,当前行是non-NA,将Flag设置为1否则它将是0

library(dplyr)

df %>% mutate(Flag = ifelse(!is.na(DV) & is.na(lag(DV, default = 0)), 1, 0 ))
#    year country DV Flag
# 1  1990 Bahamas  2    0
# 2  1991 Bahamas NA    0
# 3  1992 Bahamas NA    0
# 4  1993 Bahamas  0    1
# 5  1994 Bahamas  1    0
# 6  1995 Bahamas  2    0
# 7  1996 Bahamas NA    0
# 8  1997 Bahamas  2    1
# 9  1998 Bahamas NA    0
# 10 1999 Bahamas  2    1
# 11 2000 Bahamas NA    0
# 12 2001 Bahamas  1    1
# 13 2002 Bahamas NA    0
# 14 2003 Bahamas  1    1
# 15 2004 Bahamas NA    0
# 16 2005 Bahamas  2    1
# 17 2006 Bahamas NA    0
# 18 2007 Bahamas  0    1
# 19 2008 Bahamas  1    0
# 20 2009 Bahamas  2    0
# 21 2010 Bahamas NA    0
# 22 2011 Bahamas  2    1