【问题标题】:R - Subtracting most recent data from oldestR - 从最旧的数据中减去最新的数据
【发布时间】: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 %&gt;% group_by(ID) %&gt;% arrange(Date) %&gt;% 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,只是使用不同的数字(即工作表顶部的值和底部的值之间的差异,然后除以它按其相应的年份)。我不明白为什么结果会重复。

标签: r database


【解决方案1】:

我们按'ID'分组,arrange按'Date'分组,然后得到lastfirst'D1'的差值,以及对应的'之间year的差值日期'元素。 (假设“日期”是Date

library(dplyr)
library(lubridate)
df1 %>%      
  arrange(ID, Date) %>%
  group_by(ID) %>% 
  summarise(Diff = first(D1) - last(D1),
            nyears = year(last(Date)) - year(first(Date)))

【讨论】:

  • 嗨!非常感谢。它似乎正在工作,但是当我想将其设为列时会弹出此错误:“替换有 [x] 行,数据有 [y]。”
  • 刚刚设法克服了这一点,但我得到的不同结果都是相同的。
  • @Ayfex 不清楚您的评论。你用mutate代替summarise
  • 我用了summarise,结果是这样的:ID Difference Years 1 4.4 NA 2 4.4 NA 3 4.4 NA 4 4.4 NA 也就是说D1计算的差值都是一样的
  • @Ayfex 可能是summariseplyr::summarise 掩盖,如果同时加载了 dplyr 和 plyr。您可以在仅加载 dplyr 的新会话上执行此操作,或使用 %&gt;% dplyr::summarise(Diff = first(D1) -
猜你喜欢
  • 1970-01-01
  • 2021-09-04
  • 1970-01-01
  • 1970-01-01
  • 2018-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多