【问题标题】:Average of the previous values in a column in data.frame [closed]data.frame 中列中先前值的平均值 [关闭]
【发布时间】:2020-08-08 08:36:46
【问题描述】:

在 data.frame 中,我想添加两个值,它们是该月先前值的平均值。

df <- data.frame (  
  Year = c(rep (2009,12), rep (2010,12), rep (2011,8)),
  Month = c (1,2,3,4,5,6,7,8,9,10,11,12,1,2,3,4,5,6,7,8,9,10,11,12,1,2,3,4,5,6,7,8),
  E = c(18446, 15186,  11906, 6020, 4375, 3403, 3443, 2857, 3387, 10030, 9915, 15742, 21178, 14295, 12019, 6999, 5286, 3678, 2896,  3097, 3691, 9762, 10797, 19898, 15876, 15360, 11570, 6523, 4902, 3174, NA, NA)
)

我尝试过这样的解决方案。当我们用一个数字代替破折号时,我得到了结果,但是这个解决方案无效。

df <- df %>% 
  mutate (
    E1 = ifelse(is.na(E), mean (.[.$Month == ____ , "E"], na.rm = T), NA)
  )

预期输出

Year   Month   E       E1
2009   1       18446   NA
...
2011   6       3174    NA
2011   7       NA      3169.5
2011   8       NA      2977

3169.5 是平均值(3443, 2896)

2977 是平均值 (2857, 3097)

【问题讨论】:

  • 给定您的输入数据,您的预期输出是什么?

标签: r dplyr


【解决方案1】:

我无法在 dplyr 中制定它,但使用循环非常简单:

df <- data.frame (  
  Year = c(rep (2009,12), rep (2010,12), rep (2011,8)),
  Month = c (1,2,3,4,5,6,7,8,9,10,11,12,1,2,3,4,5,6,7,8,9,10,11,12,1,2,3,4,5,6,7,8),
  E = c(18446, 15186,  11906, 6020, 4375, 3403, 3443, 2857, 3387, 10030, 9915, 15742, 21178, 14295, 12019, 6999, 5286, 3678, 2896,  3097, 3691, 9762, 10797, 19898, 15876, 15360, 11570, 6523, 4902, 3174, NA, NA)
)

df$E1 = NA
for(i in 1:length(df$E)){
  df$E1[i] = mean(df$E[df$Month==df$Month[i] & df$Year<df$Year[i]],na.rm=T)
}

结果是:

> df
   Year Month     E      E1
1  2009     1 18446     NaN
2  2009     2 15186     NaN
3  2009     3 11906     NaN
4  2009     4  6020     NaN
5  2009     5  4375     NaN
6  2009     6  3403     NaN
7  2009     7  3443     NaN
8  2009     8  2857     NaN
9  2009     9  3387     NaN
10 2009    10 10030     NaN
11 2009    11  9915     NaN
12 2009    12 15742     NaN
13 2010     1 21178 18446.0
14 2010     2 14295 15186.0
15 2010     3 12019 11906.0
16 2010     4  6999  6020.0
17 2010     5  5286  4375.0
18 2010     6  3678  3403.0
19 2010     7  2896  3443.0
20 2010     8  3097  2857.0
21 2010     9  3691  3387.0
22 2010    10  9762 10030.0
23 2010    11 10797  9915.0
24 2010    12 19898 15742.0
25 2011     1 15876 19812.0
26 2011     2 15360 14740.5
27 2011     3 11570 11962.5
28 2011     4  6523  6509.5
29 2011     5  4902  4830.5
30 2011     6  3174  3540.5
31 2011     7    NA  3169.5
32 2011     8    NA  2977.0

【讨论】:

    猜你喜欢
    • 2018-11-27
    • 1970-01-01
    • 2015-09-05
    • 1970-01-01
    • 2021-12-27
    • 2021-11-08
    相关资源
    最近更新 更多