我想用同一列中不同组的匹配值替换列中的NAs。
示例数据
data = data.frame(groupID = c(rep("A", 4), rep("B", 4)),
date = seq(as.Date("2000-01-01"), by = "day", length.out = 4),
value = c(1, 2, 3, NA, 7, NA, 9, 10))
# groupID date value
# A 2000-01-01 1
# A 2000-01-02 2
# A 2000-01-03 3
# A 2000-01-04 NA
# B 2000-01-01 7
# B 2000-01-02 NA
# B 2000-01-03 9
# B 2000-01-04 10
value
列缺少应由具有相同时间戳(来自date
列)但来自另一组的数据填充的数据,即来自groupID
{{的数据丢失1}}应替换为组A
中的相应值,反之亦然。
所需输出
B
我尝试了什么
我试图保持我的数据整洁,但我想出的唯一工作方法是通过groupID传播数据,然后使用# groupID date value
# A 2000-01-01 1
# A 2000-01-02 2
# A 2000-01-03 3
# A 2000-01-04 10
# B 2000-01-01 7
# B 2000-01-02 2
# B 2000-01-03 9
# B 2000-01-04 10
(或ifelse
)变异,并再次收集数据,如下所示:
case_when
我想拥有什么
但是由于数据集中有> 2个组和要处理的> 1值列,我希望有一个替代方案,我可以在管道中的mutate调用中使用,而不需要扩展/收集步骤。
data %>%
spread(., key = groupID, value = value) %>%
mutate(., A = ifelse(is.na(A), B, A),
B = ifelse(is.na(B), A, B)) %>%
gather(., key = "groupID", value = "value", -date)
进行分组,然后与groupID
或类似地调用mutate,其中RHS与case_when
匹配value
date
}?mutate
中的函数来指定groupID的首选排名来填充空白?比如说,我们有A,B,C,D组,A中缺少的值应首先由C组(如果可用)填充,然后由D组(如果可用)填充,而不是D组中的值?