R 为“设置单独的变量”;“第一”;月份';s观察
我想征求您的指导意见,为“第一个”月的观察值制定单独的变量(列) 具体而言,通过“第一”,它包括:R 为“设置单独的变量”;“第一”;月份';s观察,r,dplyr,R,Dplyr,我想征求您的指导意见,为“第一个”月的观察值制定单独的变量(列) 具体而言,通过“第一”,它包括: 各组的年度第一次观察值 小组对整个观察的第一次观察 示例数据如下所示: structure(list(Group = c(1, 1, 1, 2, 2, 2, 2, 2, 3, 3), Time = structure(c(4L, 5L, 6L, 2L, 3L, 8L, 9L, 10L, 1L, 7L), .Label = c("2013-02-28", "2014
structure(list(Group = c(1, 1, 1, 2, 2, 2, 2, 2, 3, 3), Time = structure(c(4L,
5L, 6L, 2L, 3L, 8L, 9L, 10L, 1L, 7L), .Label = c("2013-02-28",
"2014-01-31", "2014-02-28", "2014-04-30", "2014-05-31", "2014-06-30",
"2015-09-30", "2015-12-31", "2016-03-31", "2017-01-31"), class = "factor"),
Value = c(0.1, 0.2, 0.3, 0.5, 0.7, 0.2, 0.3, 0.4, 0.4, 0.5
), Firstobsoftheeyear = c(0.1, 0.1, 0.1, 0.5, 0.5, 0.2, 0.3,
0.4, 0.4, 0.5), Firstobs = c(0.1, 0.1, 0.1, 0.5, 0.5, 0.5,
0.5, 0.5, 0.4, 0.4)), class = "data.frame", row.names = c(NA,
-10L), codepage = 65001L)
最终的结果是:
╔═══════╦════════════╦═══════╦═════════════════════════════════════╦═════════════════════════════════╗
║ Group ║ Time ║ Value ║ First-observation-of-the-year value ║ Group's first observation value ║
╠═══════╬════════════╬═══════╬═════════════════════════════════════╬═════════════════════════════════╣
║ 1 ║ 2014-04-30 ║ 0.1 ║ 0.1 ║ 0.1 ║
╠═══════╬════════════╬═══════╬═════════════════════════════════════╬═════════════════════════════════╣
║ 1 ║ 2014-05-31 ║ 0.2 ║ 0.1 ║ 0.1 ║
╠═══════╬════════════╬═══════╬═════════════════════════════════════╬═════════════════════════════════╣
║ 1 ║ 2014-06-30 ║ 0.3 ║ 0.1 ║ 0.1 ║
╠═══════╬════════════╬═══════╬═════════════════════════════════════╬═════════════════════════════════╣
║ 2 ║ 2014-01-31 ║ 0.5 ║ 0.5 ║ 0.5 ║
╠═══════╬════════════╬═══════╬═════════════════════════════════════╬═════════════════════════════════╣
║ 2 ║ 2014-02-28 ║ 0.7 ║ 0.5 ║ 0.5 ║
╠═══════╬════════════╬═══════╬═════════════════════════════════════╬═════════════════════════════════╣
║ 2 ║ 2015-12-31 ║ 0.2 ║ 0.2 ║ 0.5 ║
╠═══════╬════════════╬═══════╬═════════════════════════════════════╬═════════════════════════════════╣
║ 2 ║ 2016-03-31 ║ 0.3 ║ 0.3 ║ 0.5 ║
╠═══════╬════════════╬═══════╬═════════════════════════════════════╬═════════════════════════════════╣
║ 2 ║ 2017-01-31 ║ 0.4 ║ 0.4 ║ 0.5 ║
╠═══════╬════════════╬═══════╬═════════════════════════════════════╬═════════════════════════════════╣
║ 3 ║ 2013-02-28 ║ 0.4 ║ 0.4 ║ 0.4 ║
╠═══════╬════════════╬═══════╬═════════════════════════════════════╬═════════════════════════════════╣
║ 3 ║ 2015-09-30 ║ 0.5 ║ 0.5 ║ 0.4 ║
╚═══════╩════════════╩═══════╩═════════════════════════════════════╩═════════════════════════════════╝
我们可以在
年
列上创建一个分组,然后根据“组”和“年”获取第一个
的“值”,然后将分组重置为仅“组”,并重新执行第一个
以创建“组”的“第一个对象”
library(dplyr)
library(lubridate)
df1 %>%
group_by(Group, Year = year(as.Date(Time))) %>%
mutate(FirstObsoftheyear = first(Value)) %>%
group_by(Group) %>%
mutate(FirstObs = first(Value))
在base R中,您可以使用
ave
:
df$Time <- as.Date(df$Time)
df$Firstobsoftheeyear <- with(df, ave(Value, Group, format(Time, '%Y'),
FUN = function(x) x[1]))
df$Firstobs <- with(df, ave(Value, Group, FUN = function(x) x[1]))
df
# Group Time Value Firstobsoftheeyear Firstobs
#1 1 2014-04-30 0.1 0.1 0.1
#2 1 2014-05-31 0.2 0.1 0.1
#3 1 2014-06-30 0.3 0.1 0.1
#4 2 2014-01-31 0.5 0.5 0.5
#5 2 2014-02-28 0.7 0.5 0.5
#6 2 2015-12-31 0.2 0.2 0.5
#7 2 2016-03-31 0.3 0.3 0.5
#8 2 2017-01-31 0.4 0.4 0.5
#9 3 2013-02-28 0.4 0.4 0.4
#10 3 2015-09-30 0.5 0.5 0.4
df$时间