我有两个数据帧A
和B
。
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.999
和B[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