首页 > 解决方案 > 当 R 中的 df2 中有 1 时,替换 df1 中的 0

问题描述

我有 2 个具有相同列数和行数的数据框。df1 用 0 和 NA 填充,df2 用 1 和 NA 填充。只要 df2 中有 1,我希望它也出现在 df1 中,方法是替换在 df1 中的同一位置找到的 0。实际的数据帧大约有 5000 列和 85 行,所以我正在寻找一个可以轻松运行整个事情的解决方案。

df1 看起来像这样:

       1    2   3   4   5   6   7   8   9   10    
stat1  NA   NA  NA  NA  NA  NA  NA  0   0   0
stat2  0    0   0   0   0   0   0   0   0   0
stat3  0    0   0   0   0   0   NA  NA  NA  NA
stat4  NA   NA  NA  NA  NA  NA  NA  NA  NA  NA
stat5  NA   NA  NA  0   0   0   0   0   0   0
stat6  NA   NA  0   0   0   0   0   0   NA  NA
stat7  0    0   0   0   0   0   0   0   0   0
stat8  NA   NA  NA  NA  NA  NA  NA  NA  NA  NA
stat9  NA   NA  NA  NA  NA  NA  NA  NA  NA  NA
stat10 NA   NA  NA  NA  NA  0   0   0   0   0

df2 看起来像这样:

       1    2   3   4   5   6   7   8   9   10    
stat1  NA   NA  NA  NA  NA  NA  NA  NA  NA  1
stat2  1    NA  NA  NA  NA  NA  NA  NA  NA  NA
stat3  NA   NA  NA  1   NA  NA  NA  NA  NA  NA
stat4  NA   NA  NA  NA  NA  NA  NA  NA  NA  NA
stat5  NA   NA  NA  NA  NA  NA  NA  NA  NA  NA
stat6  NA   NA  NA  NA  1   NA  NA  NA  NA  NA
stat7  1    NA  NA  NA  NA  NA  NA  NA  NA  NA
stat8  NA   NA  NA  NA  NA  NA  NA  NA  NA  NA
stat9  NA   NA  NA  NA  NA  NA  NA  NA  NA  NA
stat10 NA   NA  NA  NA  NA  NA  NA  NA  NA  NA

重申一下,df1 中有 0,df2 中有 NA,我想保留 0。在 df1 和 df2 中都有 NA 的地方,我想保留 NA。df1 中有 0,df2 中有 1,我想保留 1。

我将不胜感激,因为我是一个非常新手的 R 用户!

标签: rdataframe

解决方案


我们创建一个逻辑矩阵,然后根据索引将值分配给 1

i1 <- (df2 == 1 & !is.na(df2)) & (df1 == 0 & !is.na(df1))
df1[i1] <- 1

推荐阅读