gpt4 book ai didi

R 用非 NA 值的递增/递减替换 NA

转载 作者:行者123 更新时间:2023-12-03 23:08:01 26 4
gpt4 key购买 nike

当我知道每个增量/减量应该是 1 时,我试图通过一组增量和减量填充缺失的年份值。这是一个可重复的示例。请注意,有两个 ID,其中第一个 ID 始于 2002 年(尽管丢失了),第二个 ID 始于 2007 年(同样也丢失了)。我从现有年份和增量/减量应该是 1 的事实中知道这一点。

id <- rep(c("01012895", "01021890"), each = 6)
value <- c(rnorm(12))
year <- c("NA", "NA", 2004, "NA", "NA", 2007, "NA", "NA", "NA", 2010, "NA", "NA")
df <- data.frame(id, value, year)

df
id value year
1 01012895 -1.05853432 NA
2 01012895 0.06480395 NA
3 01012895 -3.32811206 2004
4 01012895 -0.33427578 NA
5 01012895 -0.22790538 NA
6 01012895 1.46991465 2007
7 01021890 -0.65928777 NA
8 01021890 -0.25701765 NA
9 01021890 1.24331689 NA
10 01021890 0.10006530 2010
11 01021890 -0.83971071 NA
12 01021890 1.15893263 NA

df2 是我最终想要的。
year2 <- c(2002:2007, 2007:2012)
df2 <- data.frame(id, value, year2)

我试图找到使用 fill 的方法。 ,就像在 df3 ,但它只携带现有值而不能选择更改它。
df3 <- df %>% group_by(site_no) %>% fill(year, .direction = "updown")

最佳答案

这是一种方法。

首先,你自己的数据:

id <- rep(c("01012895", "01021890"), each = 6)
value <- c(rnorm(12))
year <- c(NA, "NA", 2004, "NA", "NA", 2007, "NA", "NA", "NA", 2010, "NA", "NA")
df <- data.frame(id, value, year)

year2 <- c(2002:2007, 2007:2012)
df2 <- data.frame(id, value, year2)

从因子转换为整数并使用行号和分组最大索引,我们得到以下结果:

library(dplyr)

df3 <- df %>%
group_by(id) %>%
mutate(
year = as.integer(as.character(year)), # Convert factor to integer
year = max(year, na.rm = TRUE) + (row_number() - which.max(year))
)

df3
#> # A tibble: 12 x 3
#> # Groups: id [2]
#> id value year
#> <fct> <dbl> <int>
#> 1 01012895 0.0482 2002
#> 2 01012895 -0.445 2003
#> 3 01012895 0.459 2004
#> 4 01012895 -0.740 2005
#> 5 01012895 1.91 2006
#> 6 01012895 -1.66 2007
#> 7 01021890 -1.08 2007
#> 8 01021890 -0.816 2008
#> 9 01021890 0.395 2009
#> 10 01021890 -0.0294 2010
#> 11 01021890 0.397 2011
#> 12 01021890 0.273 2012

all(df2 == df3)
#> [1] TRUE

它确实会发出警告,忽略应该没问题。

关于R 用非 NA 值的递增/递减替换 NA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61017428/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com