在R中迭代地填充具有先前值的NA行

时间:2017-10-01 21:12:28

标签: r date dataframe dataset

假设你在给定df的不同星期内有这样的事情:

DoW Value
Mon 1234
Tue NA
Wed 5678
Thu 9123
Fri 4567
Sat 8912
Sun 3456

我想用星期一的通讯周价值填写每个星期二的NA。我怎么能这样做,最好用尽可能少的代码?

感谢。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

您也可以使用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