比较逻辑数据帧和数字数据帧

时间:2017-04-04 03:59:38

标签: r dataframe

我有2个数据框:

> df1
  a   b  c
1 1a 11 21
2 2a 12 22
3 3b 13 23
4 4b 14 24
5 5b 15 25
> df2
  a      b     c
1 1a  TRUE  TRUE
2 2a FALSE FALSE
3 3b  TRUE FALSE
4 4b  TRUE  TRUE
5 5b FALSE FALSE

我只需保留TRUE的{​​{1}}值,并将df1值替换为FALSE,如下所示:

NA

我一直在考虑使用> df3 a b c 1 1a 11 21 2 2a NA NA 3 3b 13 NA 4 4b 14 24 5 5b NA NA 循环来检查数据框的每个位置(只有b和c列),但我想知道我是否有基本功能或包使用

PS。我需要在 a 列中始终出现,以免迷路。 谢谢大家。

1 个答案:

答案 0 :(得分:1)

如果您知道两个data.frames在同一订单中具有相同的a值,则可以

if(all(df1$a==df2$a)) {
    is.na(df1[,-1]) <-!df2[,-1]
    # alternatively
    # df1[,-1][!as.matrix(df2[,-1])] <- NA
}

is.na功能允许重新分配,并将NA值放在右侧为TRUE的位置