具有数字数据框的逻辑数据框,并用 NA 和 R 替换 FALSE

logical dataframe with numerical dataframe and substitute FALSE by NA with R

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

所以我有两个数据帧:df,其中包含数值和 's and another, j which contains only TRUE, FALSE or ,我想从 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

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

这是一个可能的解决方案

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

快速解释

首先,我们使用 is.na<- 赋值函数将 j 中的所有 FALSE 条目转换为 NAs,然后我们将其转换为矩阵以便将其用作 df 内的 row/column 索引。 NA 索引将 return NA,而 TRUE 将提供正确的索引。虽然输出将是一个向量,因此我们使用 [<- 函数来保留 df

的原始结构