我有一个包含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 NA
是bb[,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
的值。如果V2
是NA
,首先我要检查V2
是否有值,如果是NA
那么V3
将是TRUE
}},第二,如果V5
是V3
且V3
有值,那么NA
将是V4
的值,最后如果{{1} }和V5
为V4
,然后V3
为V4
。
非常感谢
答案 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])
)
(未测试的)