由网友(炫迈持久 爱你久久)分享简介:我的数据帧如下:df <- data.frame(ID=c("A", "A", "A", "A", "B", "B", "B", "B","C", "C", "C", "C","D", "D", "D", "D"),grade=c("KG", "01", "02", "03","KG", "01", "02", "0...![Excel小白到上手,这位老师仅用了这几个技巧就会了](https://p.xsw88.cn/allimgs/daicuo/20230904/6782.png)
我的数据帧如下:
df <- data.frame(ID=c("A", "A", "A", "A",
"B", "B", "B", "B",
"C", "C", "C", "C",
"D", "D", "D", "D"),
grade=c("KG", "01", "02", "03",
"KG", "01", "02", "03",
"KG", "01", "02", "03",
"KG", "01", "02", "03"),
year=c(2002, 2003, NA, 2005,
2007, NA, NA, 2010,
NA, 2005, 2006, NA,
2009, 2010, NA, NA))
我希望能够通过ID
来计算丢失的year
值,结果如下:
wanted_df <- data.frame(ID=c("A", "A", "A", "A",
"B", "B", "B", "B",
"C", "C", "C", "C",
"D", "D", "D", "D"),
grade=c("KG", "01", "02", "03",
"KG", "01", "02", "03",
"KG", "01", "02", "03",
"KG", "01", "02", "03"),
year=c(2002, 2003, 2004, 2005,
2007, 2008, 2009, 2010,
2004, 2005, 2006, 2007,
2009, 2010, 2011, 2012))
![Excel小白到上手,这位老师仅用了这几个技巧就会了](https://p.xsw88.cn/allimgs/daicuo/20230904/6782.png)
我已尝试使用以下工具计算值:
lag()
和lead()
函数
加入由年份组成的数据帧
都没有奏效。任何帮助都将不胜感激。谢谢。
推荐答案
我们可以使用na_interpolate/na_extrapolate
library(dplyr)
# remotes::install_github("skgrange/threadr")
library(threadr)
df %>%
group_by(ID) %>%
mutate(year = na_extrapolate(na_interpolate(year))) %>%
ungroup
-输出
# A tibble: 16 × 3
ID grade year
<chr> <chr> <dbl>
1 A KG 2002
2 A 01 2003
3 A 02 2004
4 A 03 2005
5 B KG 2007
6 B 01 2008
7 B 02 2009
8 B 03 2010
9 C KG 2004.
10 C 01 2005
11 C 02 2006
12 C 03 2007
13 D KG 2009
14 D 01 2010
15 D 02 2011
16 D 03 2012.
相关推荐
最新文章