带有数字数据帧的逻辑数据帧,用NA替换为RAL的FALSE

时间:2015-05-21 19:55:34

标签: r na

这可能是一个非常愚蠢的问题,但我在是一个绝对的初学者,我到处寻找并尝试了多种方法,我无法解决问题。

所以我有两个数据帧:df包含数值和和另一个,j只包含TRUE,FALSE或,我想从df中恢复值对应于j的TRUE位置,FALSE将其值替换为NA,将NA保持为NA。

示例:

df
           12h      13h      14h       15h       16h
00003      1        NA       10        NA        NA     
00017      NA       NA       15        18        NA
00018      33       12       25        NA        33
00021      20       12       11        NA        7
00025      NA       21       21        1         9
00031      3        11       NA        NA        3


j
           12h      13h      14h       15h       16h
00003      NA       NA       FALSE     NA        NA     
00017      NA       NA       FALSE     TRUE      NA
00018      FALSE    FALSE    TRUE      NA        NA
00021      TRUE     FALSE    FALSE     NA        TRUE
00025      NA       TRUE     NA        TRUE      FALSE
00031      TRUE     FALSE    NA        NA        TRUE

结果是这样的结果:

 df.results
           12h      13h      14h       15h       16h
00003      NA       NA       NA        NA        NA     
00017      NA       NA       NA        18        NA
00018      NA       NA       25        NA        NA
00021      20       NA       NA        NA        7
00025      NA       21       NA        1         NA
00031      3        NA       NA        NA        3

不确定我是否清楚自己,但我真的很感激任何帮助。 谢谢!

1 个答案:

答案 0 :(得分:2)

这是一个可能的解决方案

is.na(j) <- j == FALSE
df[] <- df[as.matrix(j)]
df
#       X12h X13h X14h X15h X16h
# 00003   NA   NA   NA   NA   NA
# 00017   NA   NA   NA   18   NA
# 00018   NA   NA   25   NA   NA
# 00021   20   NA   NA   NA    7
# 00025   NA   21   NA    1   NA
# 00031    3   NA   NA   NA    3

快速解释

首先,我们使用FALSE分配函数将j中的所有NA条目转换为is.na<-,然后我们将其转换为矩阵以便将其用作df中的行/列索引。 NA索引将返回NA,而TRUE将提供正确的索引。虽然输出将是一个向量,但我们使用[<-函数来保留df的原始结构