这可能是一个非常愚蠢的问题,但我在r是一个绝对的初学者,我到处寻找并尝试了多种方法,我无法解决问题。
所以我有两个数据帧:df包含数值和na和另一个,j只包含TRUE,FALSE或na,我想从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
不确定我是否清楚自己,但我真的很感激任何帮助。 谢谢!
答案 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
的原始结构