【发布时间】:2015-06-20 19:17:57
【问题描述】:
您好,这是我在 stackoverflow 上的第一篇文章。我一直在尝试解决这个问题,但无法单独找出答案,也无法找到其他回答这个问题的帖子。
我需要用另一个数据帧中的值替换我的数据集中的缺失值;然而,棘手的地方在于我需要匹配的值有另一个与它们相关的因素,但匹配日期。
这是第一个数据帧的简化版本:
> df1
date site Value
1991-07-08 A 22.5
1991-07-09 A NaN
1992-07-13 B 23.1
1992-07-14 A NaN
1993-07-07 B 27.3
这是第二个数据框的简化版本:
> df2
date site value
1991-07-08 A 22.5
1991-07-09 A NaN
1992-07-14 A NaN
1991-07-08 B 10.6
1992-07-09 B 23
1992-07-14 B NaN
1992-07-09 C 11.3
1992-07-14 C 12.4
我想要做的是,当 A 缺少值时,将其替换为 B 中的值(具有相同的日期),如果 B 没有值,则使用 C 的值(具有相同的日期)。因此,生成的数据框将如下所示:
> dfFIN
date site Value
1991-07-08 A 22.5
1991-07-09 A 23
1992-07-13 B 23.1
1992-07-14 A 12.4
1993-07-07 B 27.3
这是我目前想出的:
dfFIN<-replace(df1[which(df1$site=="A"),],
df1$value[which(df$value=="NaN")],
df2$value[which(df2$site=="B" &
df2$date==df1$date[which(df1$value=="NaN" & df1$site=="A")])])
但是,我收到以下错误消息:
Error in [<-.data.frame(*tmp*, list, value = numeric(0)) :
missing values are not allowed in subscripted assignments of data frames
而且我还没有合并站点 C。我不太确定该怎么做,如果有任何帮助,我将不胜感激。
【问题讨论】:
-
您需要使用
?is.nan而不是尝试=="NaN"-NaN是一个代表无限值的特殊值。