r - R用非NA值的增量/减量替换NA
问题描述
当我知道每个增量/减量应该为 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
,例如 in 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
它确实会发出警告,应该可以忽略。
推荐阅读
- python - Numpy.where(ValueError:只能比较相同标签的系列对象)
- ios - UIKit:如何将多个 CALayer 混合到一个视图层中?
- azure - Pulumi azure-native 提供程序:Azure WebApp:参数 LinuxFxVersion 的值无效
- feathersjs - 使用 feathersjs 登录 github 的问题
- android - Material Theme Colors 导致空白 Jetpack Compose 按钮
- python - Flask 将在 __init__.py 中执行代码,但无法让它在 app.py 中运行
- angular - 如何通过 Angular 中的 POST 请求将 CSV 文件发送到 Spring 应用程序?
- esp32 - 如何修复 - 无法在 Esp32 中打开端口“/dev/cu.SLAB_USBtoUART”
- azure-devops - Azure devops 发布管道触发器
- postgresql - 如何在 azure 管道中使用的 windows-latest 代理上使用 postgres db?