假设你在给定df的不同星期内有这样的事情:
DoW Value
Mon 1234
Tue NA
Wed 5678
Thu 9123
Fri 4567
Sat 8912
Sun 3456
我想用星期一的通讯周价值填写每个星期二的NA。我怎么能这样做,最好用尽可能少的代码?
感谢。
答案 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