r - R中下一整年的上个月年值

标签 r database dataframe

我有这样的月度数据,其中第一列是 date,下一列是 me:

我需要做一些简单的事情: 我需要创建另一个变量,以便在整个 1994 年,它采用 me 1993 年 12 月的值;同样,对于 1995 年,它取 1994 年 12 月的值,依此类推。如果不可用,则给 NA。

structure(list(date = structure(c(8673, 8702, 8734, 8765, 8796, 
8824, 8855, 8884, 8916, 8946, 8975, 9008, 9038, 9069, 9099, 9129, 
9161, 9189, 9220, 9248, 9281, 9311, 9342, 9373, 9402, 9434, 9464, 
9493, 9526, 9555, 9584, 9616, 9647, 9675, 9708, 9738, 9769, 9800, 
9829, 9861, 9892, 9920, 9951, 9981, 10011, 10042, 10073, 10102, 
10134, 10165, 10193, 10226, 10256, 10284, 10316, 10346, 10375, 
10407, 10438, 10469, 10499, 10529, 10560, 10591, 10620, 10648, 
10681, 10711, 10739, 10772, 10802, 10834, 10864, 10893, 10925, 
10956, 10987, 11016, 11047, 11075, 11108, 11138, 11169, 11200, 
11229, 11261, 11291, 11320), class = "Date"), me = c(41535, 39458.25, 
38766, 43611.75, 54687.75, 65763.75, 66456, 92069.25, 89300.25, 
82452.125, 81066.375, 76909.125, 70698.75, 79709.375, 77630, 
71391.875, 69312.5, 69312.5, 70542.8125, 52621.125, 46520.125, 
43469.625, 45757.5, 43850.9375, 40492, 32088, 38964, 35149.75, 
32857.375, 35149.75, 29074.75, 26779.375, 27544.5, 32140.5, 32905.75, 
32905.75, 34436.25, 31375.25, 32140.5, 29878.875, 39838.5, 42519.9375, 
42707.25, 40014, 43861.5, 51615.125, 46992.875, 46992.875, 53996.25, 
47053.875, 47053.875, 46706, 50180, 56356, 65641.25, 69116.375, 
65255.125, 60469.5, 62020, 41863.5, 48919.5, 55908, 57461, 57970.3125, 
59137.5, 53301.5625, 68475, 72365.625, 65751.5625, 71587.5, 85982.8125, 
73921.875, 84496.5, 82149.375, 79019.875, 89973.125, 99752.8125, 
106794.1875, 103425.5625, 123669, 143544.375, 143325, 139668.75, 
143325, 139536, 122820.75, 125001, 101933.0625)), .Names = c("date", 
"me"), class = "data.frame", row.names = c(81L, 80L, 79L, 82L, 
87L, 91L, 92L, 88L, 83L, 90L, 94L, 86L, 84L, 93L, 89L, 85L, 102L, 
101L, 95L, 105L, 96L, 106L, 99L, 100L, 104L, 98L, 97L, 103L, 
108L, 107L, 112L, 111L, 109L, 110L, 114L, 117L, 115L, 116L, 118L, 
113L, 123L, 125L, 130L, 128L, 119L, 122L, 127L, 120L, 126L, 129L, 
121L, 124L, 140L, 136L, 139L, 137L, 134L, 132L, 131L, 141L, 133L, 
135L, 138L, 142L, 146L, 153L, 154L, 150L, 148L, 144L, 149L, 152L, 
143L, 145L, 151L, 147L, 165L, 157L, 156L, 163L, 164L, 160L, 161L, 
158L, 155L, 166L, 162L, 159L))

最佳答案

前一个 12 月的 me 值是在 m 行后面找到的值,其中 m 为 1 表示 1 月,2 表示 2 月,依此类推否则,如果后面没有 m 行,则为 NA。计算 m 和连续行号 ix 我们有以下内容。没有使用包。

m <- as.numeric(format(DF$date, "%m"))
ix <- seq_len(nrow(DF))
transform(DF, me_dec = me[ifelse(ix - m < 1, NA, ix - m)])

给予:

          date        me   me_dec
81  1993-09-30  41535.00       NA
80  1993-10-29  39458.25       NA
79  1993-11-30  38766.00       NA
82  1993-12-31  43611.75       NA
87  1994-01-31  54687.75 43611.75
91  1994-02-28  65763.75 43611.75
92  1994-03-31  66456.00 43611.75
88  1994-04-29  92069.25 43611.75
83  1994-05-31  89300.25 43611.75
90  1994-06-30  82452.12 43611.75
94  1994-07-29  81066.38 43611.75
86  1994-08-31  76909.12 43611.75
84  1994-09-30  70698.75 43611.75
93  1994-10-31  79709.38 43611.75
89  1994-11-30  77630.00 43611.75
85  1994-12-30  71391.88 43611.75
102 1995-01-31  69312.50 71391.88
101 1995-02-28  69312.50 71391.88
95  1995-03-31  70542.81 71391.88
105 1995-04-28  52621.12 71391.88
96  1995-05-31  46520.12 71391.88
106 1995-06-30  43469.62 71391.88
99  1995-07-31  45757.50 71391.88
100 1995-08-31  43850.94 71391.88
104 1995-09-29  40492.00 71391.88
98  1995-10-31  32088.00 71391.88
97  1995-11-30  38964.00 71391.88
103 1995-12-29  35149.75 71391.88
108 1996-01-31  32857.38 35149.75
107 1996-02-29  35149.75 35149.75
112 1996-03-29  29074.75 35149.75
111 1996-04-30  26779.38 35149.75
109 1996-05-31  27544.50 35149.75
110 1996-06-28  32140.50 35149.75
114 1996-07-31  32905.75 35149.75
117 1996-08-30  32905.75 35149.75
115 1996-09-30  34436.25 35149.75
116 1996-10-31  31375.25 35149.75
118 1996-11-29  32140.50 35149.75
113 1996-12-31  29878.88 35149.75
123 1997-01-31  39838.50 29878.88
125 1997-02-28  42519.94 29878.88
130 1997-03-31  42707.25 29878.88
128 1997-04-30  40014.00 29878.88
119 1997-05-30  43861.50 29878.88
122 1997-06-30  51615.12 29878.88
127 1997-07-31  46992.88 29878.88
120 1997-08-29  46992.88 29878.88
126 1997-09-30  53996.25 29878.88
129 1997-10-31  47053.88 29878.88
121 1997-11-28  47053.88 29878.88
124 1997-12-31  46706.00 29878.88
140 1998-01-30  50180.00 46706.00
136 1998-02-27  56356.00 46706.00
139 1998-03-31  65641.25 46706.00
137 1998-04-30  69116.38 46706.00
134 1998-05-29  65255.12 46706.00
132 1998-06-30  60469.50 46706.00
131 1998-07-31  62020.00 46706.00
141 1998-08-31  41863.50 46706.00
133 1998-09-30  48919.50 46706.00
135 1998-10-30  55908.00 46706.00
138 1998-11-30  57461.00 46706.00
142 1998-12-31  57970.31 46706.00
146 1999-01-29  59137.50 57970.31
153 1999-02-26  53301.56 57970.31
154 1999-03-31  68475.00 57970.31
150 1999-04-30  72365.62 57970.31
148 1999-05-28  65751.56 57970.31
144 1999-06-30  71587.50 57970.31
149 1999-07-30  85982.81 57970.31
152 1999-08-31  73921.88 57970.31
143 1999-09-30  84496.50 57970.31
145 1999-10-29  82149.38 57970.31
151 1999-11-30  79019.88 57970.31
147 1999-12-31  89973.12 57970.31
165 2000-01-31  99752.81 89973.12
157 2000-02-29 106794.19 89973.12
156 2000-03-31 103425.56 89973.12
163 2000-04-28 123669.00 89973.12
164 2000-05-31 143544.38 89973.12
160 2000-06-30 143325.00 89973.12
161 2000-07-31 139668.75 89973.12
158 2000-08-31 143325.00 89973.12
155 2000-09-29 139536.00 89973.12
166 2000-10-31 122820.75 89973.12
162 2000-11-30 125001.00 89973.12
159 2000-12-29 101933.06 89973.12

关于r - R中下一整年的上个月年值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53445972/

相关文章:

R:将字符变量编码为数字

database - 'Entity'和 'Table'的区别

php - MySQL 跳过第一行

r - 如何过滤具有两列条件的数据框?

rJava 在 .jcall 中给出 NullPointerException

r - 使用循环一次比较 R 中的三个(或更多)变量与 ifelse

java - 在Liferay搜索容器中显示来自不同数据库表的数据: Liferay

python - Pandas 使用外部变量应用函数

python - 将具有不同索引的数据帧添加到时间序列

r - 如何使用通用方法仅删除 R 中存在的异常值