gpt4 book ai didi

r - 在 dplyr 中使用 approx

转载 作者:行者123 更新时间:2023-12-01 07:53:37 25 4
gpt4 key购买 nike

我正在尝试对每个 id 进行线性近似在 year 之间的数据框中使用点 x . dplyr似乎是一个合适的选择,但由于错误,我无法让它工作:

Error: incompatible size (9), expecting 3 (the group size) or 1



示例代码:
library(dplyr)
dat <- data.frame(id = c(1,1,1,2,2,2,3,3,3), year = c(1,2,3,1,2,3,1,2,3), x = c(1,NA,2, 3, NA, 4, 5, NA, 6))

# Linear Interpolation
dat %>%
group_by(id) %>%
mutate(x2 = as.numeric(unlist(approx(x = dat$year, y = dat$x, xout = dat$x)[2])))

样本数据:
  id year  x
1 1 1 1
2 1 2 NA
3 1 3 2
4 2 1 3
5 2 2 NA
6 2 3 4
7 3 1 5
8 3 2 NA
9 3 3 6

最佳答案

这里有几种方法(从评论中转移):

1) na.approx/ave

library(zoo)

transform(dat, x2 = ave(x, id, FUN = na.approx))

由于年份为 1、2、3,我们不需要指定它,但如果需要,则:
nr <- nrow(dat)
transform(dat, x2 = ave(1:nr, id, FUN = function(i) with(dat[i, ], na.approx(x, year))))

2) na.approx/dplyr
library(dplyr)
library(zoo)

dat %>%
group_by(id) %>%
mutate(x2 = na.approx(x, year)) %>%
ungroup()

如果不需要年份,则省略 na.approx 的第二个参数.

注: zoo还有其他的NA填充功能,特别是 na.splinena.locf .

关于r - 在 dplyr 中使用 approx,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36926984/

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