我有两个data.frames A
和B
。
A
包含负值,绝对值和NA值。
B
仅包含正值和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
。
我可以在嵌套循环中为列和行执行此操作,但这需要花费太多时间。有更快的方法吗?
答案 0 :(得分:2)
如果布尔掩码的大小相同,则可以将其作为索引传递:
b[is.na(a) | a < 0] <- 0.999
答案 1 :(得分:0)
我会使用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