这里的第一个问题,希望我已经正确地做到了这一点!
我有一个大型数据集,以下是一个小样本:
id <- c(1, 1, 1, 1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5, 6)
year <- c("2010", "2011", "2012", "2014", "2012", "2013", "2011", "2012", "2013", "2010", "2011", "2012", "2013", "2008", "2009", "2011")
value <- c(100, 33, 80, 90, 80, 100, 100, 90, 80, 90, 80, 100, 100, 90, 80, 99)
df <- data.frame(id, year, value)
df
对于每个id,我想返回连续两年的值,以便我可以将第n年的值与第n + 1年的值进行比较。如果没有连续两年,那么就不要为那个id返回任何东西。
输出应如下:
id <- c(1, 1, 2, 3, 3, 4, 4, 4, 5)
year <- c("2010", "2011", "2012", "2011", "2012", "2010", "2011", "2012", "2008")
yvalue <- c(100, 33, 80, 100, 90, 90, 80, 100, 90)
yearadd1 <- c("2011", "2012", "2013", "2012", "2013", "2011", "2012", "2013", "2009")
valueadd1 <- c(33, 80, 100, 90, 80, 80, 100, 100, 80)
df <- data.frame(id, year, yvalue, yearadd1, valueadd1)
df
如何让r给我这个输出? 我面临的主要困难是,对于id = 1,第一对连续年份是2010年和2011年,而对于id = 4,它们是2008年和2009年,所以我不能定义第一年是什么,因为它因id而异。
答案 0 :(得分:0)
我们可以使用data.table
。将'data.frame'转换为'data.table'(setDT(df)
),按'id'分组,我们遍历列'year','value'并使用{获得lead
观察{1}},将其分配(shift
)到新列并删除NA行(:=
)。然后获取行'id(na.omit
),其中'yearadd1'中的连续元素等于1,并提取这些行。
.I