R:如果值较小或者更新另一个data.frame

时间:2016-01-13 01:10:29

标签: r

我有两个data.frames AB

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.999B[1,5]=0.999

我可以在嵌套循环中为列和行执行此操作,但这需要花费太多时间。有更快的方法吗?

2 个答案:

答案 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