【发布时间】:2018-06-26 15:52:53
【问题描述】:
所以我正在使用的当前数据帧具有以下格式:
ID Date D1
1 2011-07-03 5
1 2012-04-05 6
1 2015-02-06 7
2 2010-08-21 4
2 2011-06-06 2
3 2016-05-20 5
3 2010-03-10 10
其中 ID 是唯一 ID。我希望能够从每组 ID 的最旧日期中减去 D1 从最近的日期中减去 D1。
然后我想将结果除以最旧日期和最新日期之间的#Years。这可能吗?
更新:
大家好。我输入了这段代码:
z <- y %>%
arrange(y$ID, y$Date) %>%
group_by(y$ID) %>%
summarise(Diff = first(y$D1) - last(y$D1),
nyears = year(last(y$Date)) - year(first(y$Date)))
但是返回的数据是:
ID Diff nyears
0 1.12 27
1 1.12 27
2 1.12 27
3 1.12 27
4 1.12 27
5 1.12 27
6 1.12 27
8 1.12 27
9 1.12 27
13 1.12 27
这些数字似乎非常不准确,而且结果不断重复。我该如何解决这个问题?理想情况下。我希望我的输出只是根据给定唯一 ID 的 D1 中的差异计算差异:
ID Diff
0 1.12
1 0.32
2 3.2
等等。
【问题讨论】:
-
使用预期输出更新您的示例。
-
试试
library(dplyr);df1 %>% group_by(ID) %>% arrange(Date) %>% summarise(Diff = first(D1) - last(D1), years = year(first(Date)) - year(last(Date))) -
样本数据和所需输出不同步。您需要更正它,我还建议使用
dput(y)共享输入数据。顺便说一句,对于这个新要求,您只需将@akrun 的解决方案修改为summarise(Diff = (last(D1) - first(D1))/lubridate::time_length(difftime(last(Date), first(Date)), "years"))。 -
无论ID如何,输出仍然打印相同的Diff,只是使用不同的数字(即工作表顶部的值和底部的值之间的差异,然后除以它按其相应的年份)。我不明白为什么结果会重复。