R: 如果值小于或为na,则更新另一个data.frame



我有两个数据帧AB

A包含负值、绝对值和NA值。

CCD_ 4仅包含正值和NA值。

数据帧的尺寸是相同的。

data.frame A看起来像这样:

ENSMUSG00000000001.4/Gnai3   0.1943315     0.3021675             NA             NA  
ENSMUSG00000000003.9/Pbsn   -1.4843914    -1.2608270     -0.2587953    -0.46167430
ENSMUSG00000000028.8/Cdc45  -0.2388901    -0.1106236      0.9046436     0.08968331
ENSMUSG00000000037.9/Scml    0.3242902     0.5385371      0.2311202     0.51110287
ENSMUSG00000000049.5/Apoh   -1.7606033    -1.8159545     -0.2087083    -1.09614630
ENSMUSG00000000056.7/Narf    NA            NA            -0.3747798    -0.55547798

我需要检查这个表中的值是NA还是负数,然后我需要将相同索引上的data.frame B更新为值0.999

例如:A的第一条记录有两个NA值,索引为[1,4]和[1,5],这意味着,我将更新B[1,4]=0.999B[1,5]=0.999

我可以在列和行的嵌套循环中这样做,但这会花费太多时间。有更快的路吗?

如果大小相同,则可以将布尔掩码作为索引传递:

b[is.na(a) | a < 0] <- 0.999

我会使用ifelse来实现这一点,因为数据帧具有相同的维度。

A<-matrix(data=1:15,nrow=5) # create matrices (works with dataframe as well)
B<-matrix(data=16:30,nrow=5)
B[1,2]<-NA # introduce some NA and negative values
B[5,3]<-(-1)
ifelse(is.na(B) | B<=0,A,B) # new matrix with "updated" values

最新更新