如果和& R中的陈述

时间:2014-04-06 21:46:11

标签: r

我有一个包含4列的data.frame:

> bb
               V1      V2      V3       V4
1         ARFGEF2 ARFGEF2 ARFGEF2     <NA>
2           SFRS5    <NA>   SRSF5     <NA>
3 ENSG00000215104    <NA>    <NA> CHMP1B2P
4            EDF1    EDF1    EDF1     <NA>
5    LOC100133678    <NA>    <NA>     <NA>
6            CD3G    CD3G       -     <NA>
7           GNAI2   GNAI2   GNAI2     <NA>

我想根据第2,3和4列的值创建一个新列。我要做的是: 如果bb[,2]NA 并且 bb[,3]有值,那么bb[,5]将是bb[,3]的值,如果{{1} }}是bb[,2] AND NAbb[,3]NA有一个值,那么df[,4]将是{的值{1}},否则bb[,5]将为bb[,4]。这是预期的输出:

bb[,5]

我正在尝试使用此代码,但它不起作用:

df[,1]

如何将> bb V1 V2 V3 V4 V5 1 ARFGEF2 ARFGEF2 ARFGEF2 <NA> ARFGEF2 2 SFRS5 <NA> SRSF5 <NA> SRSF5 3 ENSG00000215104 <NA> <NA> CHMP1B2P CHMP1B2P 4 EDF1 EDF1 EDF1 <NA> EDF1 5 LOC100133678 <NA> <NA> <NA> <NA> 6 CD3G CD3G - <NA> - 7 GNAI2 GNAI2 GNAI2 <NA> GNAI2 > for (i in 1:nrow(bb)){ if (is.na(bb[i,2] & !(is.na(bb[i,3])))) {bb[i,5] <- as.character(bb[i,3])} else if (is.na(bb[i,2]) & !(is.na(bb[i,4]))) {bb[i,5] <- as.character(bb[i,4])} else { bb[i,5] <- bb[i,1]} } Warning messages: 1: In Ops.factor(bb[i, 2], !(is.na(bb[i, 3]))) : & not meaningful for factors 2: In Ops.factor(bb[i, 2], !(is.na(bb[i, 3]))) : & not meaningful for factors 3: In Ops.factor(bb[i, 2], !(is.na(bb[i, 3]))) : & not meaningful for factors 4: In Ops.factor(bb[i, 2], !(is.na(bb[i, 3]))) : & not meaningful for factors 5: In Ops.factor(bb[i, 2], !(is.na(bb[i, 3]))) : & not meaningful for factors 6: In Ops.factor(bb[i, 2], !(is.na(bb[i, 3]))) : & not meaningful for factors 7: In Ops.factor(bb[i, 2], !(is.na(bb[i, 3]))) : & not meaningful for factors 声明一起使用?这是一个更长的data.frame的示例,我想创建一个新列(&),如果if不是V5,则会使用V1的值。如果V2NA,首先我要检查V2是否有值,如果是NA那么V3将是TRUE }},第二,如果V5V3V3有值,那么NA将是V4的值,最后如果{{1} }和V5V4,然后V3V4

非常感谢

1 个答案:

答案 0 :(得分:4)

您的for循环应该使用&&而不是&。也是第一个is.na的缺失括号。但是试试ifelse函数,就行

bb[,5] <- ifelse(is.na(bb[,2]) & !is.na(bb[,3]), 
            bb[,3], 
            ifelse(is.na(bb[,2]) & !is.na(bb[,4]), bb[,4], bb[,1])
          )

(未测试的)