在R中迭代地用先前的值填充NA行[重复]
Posted
技术标签:
【中文标题】在R中迭代地用先前的值填充NA行[重复]【英文标题】:Fill NA row with previous value iteratively in R [duplicate] 【发布时间】:2018-03-13 00:26:57 【问题描述】:假设您在给定 df 的不同周内都有这样的事情:
DoW Value
Mon 1234
Tue NA
Wed 5678
Thu 9123
Fri 4567
Sat 8912
Sun 3456
我想在每周二的 NA 中填写其对应周的周一值。我该如何做到这一点,最好使用尽可能少的代码?
谢谢。
【问题讨论】:
``图书馆(动物园); na.locf(DF, na.rm = FALSE). If the leading values cannot be NA then the
na.rm=` 参数可以省略。如果您只想将其应用于一列而不是其他列,则 transform(DF, Value = na.locf0(Value))
其中 na..locf0
类似于 na.locf
但默认为 na.rm=FALSE
并且仅处理向量。
【参考方案1】:
这个呢?
mydf <- structure(list(DoW = c("Mon", "Tue", "Wed", "Thu", "Fri", "Sat",
"Sun"), Value = c(1234L, NA, 5678L, 9123L, 4567L, 8912L, 3456L
)), .Names = c("DoW", "Value"), class = "data.frame", row.names = c(NA,
-7L))
tuesd_na <- which(mydf$DoW == "Tue" & is.na(mydf$Value))
mydf$Value[tuesd_na] <- mydf$Value[tuesd_na - 1]
mydf
#> DoW Value
#> 1 Mon 1234
#> 2 Tue 1234
#> 3 Wed 5678
#> 4 Thu 9123
#> 5 Fri 4567
#> 6 Sat 8912
#> 7 Sun 3456
【讨论】:
【参考方案2】:您也可以使用tidyr::fill
来执行此操作。
library('tidyverse')
df <- tribble(
~DoW, ~Value,
'Mon', 1234,
'Tue', NA,
'Wed', 5678,
'Thu', 9123,
'Fri', 4567,
'Sat', 8912,
'Sun', 3456
)
fill(df, Value)
# # A tibble: 7 x 2
# DoW Value
# <chr> <dbl>
# 1 Mon 1234
# 2 Tue 1234
# 3 Wed 5678
# 4 Thu 9123
# 5 Fri 4567
# 6 Sat 8912
# 7 Sun 3456
【讨论】:
以上是关于在R中迭代地用先前的值填充NA行[重复]的主要内容,如果未能解决你的问题,请参考以下文章