2017-02-10 154 views
0

我试图如下以产生一个新的变量:重新编码ifelse或语句

如果种皮值是1和用于TESTB值为1 ==>码testAB为1

如果种皮值1和缺少TESTB值或0 ==>码testAB为1

如果种皮值丢失或0和值TESTB是1 ==>码testAB为1

如果种皮值是0并且testB的值为0 ==> code testAB as 0

如果testA的值缺失且testB的值缺失==> code testAB as NA

我想出的代码如下所示不起作用。如果testA和testB是1,那么似乎只产生一个1,否则就是NA。你有什么建议?谢谢!

df2$testAB<-ifelse((df1$testA == 1) | (df1$testB == 1),1,0),1, 0,NA)) 
+0

也许'as.numeric(as.logical(DF1 $种皮)| as.logical(DF1 $ TESTB))' – Benjamin

回答

1

这应该得到你在找什么

df1 <- data.frame(testA = c(1, 1, 1, 0, 0, 0, NA, NA, NA), 
        testB = c(0, 1, NA, 0, 1, NA, 0, 1, NA)) 

ind <- is.na(df1$testA) + is.na(df1$testB) < 2 
df1$testAB[!ind] <- NA 
df1$testAB[ind] <- as.numeric(as.logical(rowSums(df1[ind,], na.rm = TRUE))) 

> df1 
    testA testB testAB 
1  1  0  1 
2  1  1  1 
3  1 NA  1 
4  0  0  0 
5  0  1  1 
6  0 NA  0 
7 NA  0  0 
8 NA  1  1 
9 NA NA  NA 
+0

unforutnately这似乎并没有工作,因为它忽略了第一个0.基本上我想要一个或这样做的命令:if testA == 1 | testB == 1 then testAB == 1. otherwise testAB == 0. if testA and testB == NA,then testAB == NA – victoria

+0

@Victoria回答更新以解释值为'0'和'NA'的情况 – manotheshark