【问题标题】:Calculate duration/difference between first and n rows that match on column value计算与列值匹配的第一行和 n 行之间的持续时间/差异
【发布时间】:2017-02-17 09:36:57
【问题描述】:

我正在尝试计算在一个列中匹配的数据帧的第一行和 n 行之间的差异/持续时间。我想将该值放在新列“持续时间”中。示例数据:如下。

y <- data.frame(c("USA", "USA", "USA", "France", "France", "Mexico", "Mexico", "Mexico"), c(1992, 1993, 1994, 1989, 1990, 1999, 2000, 2001))
colnames(y) <- c("Country", "Year")
y$Year <- as.integer(y$Year) # this is to match the class of my actual data

我想要的结果是:

1992    USA 0
1993    USA 1
1994    USA 2
1989    France  0
1990    France  1
1999    Mexico  0
2000    Mexico  1
2001    Mexico  2

我试过使用dplyr's group_by and mutate

y <- y %>% group_by(Country) %>% mutate(duration = Year - lag(Year)) 

但我只能得到实际的滞后年份(例如 1999 年),或者只能计算连续行之间的差异,让我得到一个国家第一行的 NA 或所有其他行的 1同一个国家。 Many q & a's 关注 difference between sequential rows 而不是第一行和 n 行之间。

想法?

【问题讨论】:

  • 你可以这样做with(y, ave(seq_along(Year), Country, FUN = seq_along)-1) 或者如果是区别y %&gt;% group_by(Country) %&gt;% mutate(duration = Year - first(Year))
  • 谢谢,@akrun!这很棒。我是 R 的新手,花了几个小时试图弄清楚,但一定是在寻找错误的术语/流程。再次感谢!

标签: r dplyr duration


【解决方案1】:

这可以通过在按“国家”分组后用“年份”列减去first“年份”来完成。

y %>%
   group_by(Country) %>%
   mutate(duration = Year - first(Year))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 2018-10-12
    • 2021-11-19
    • 1970-01-01
    • 2017-02-14
    • 1970-01-01
    相关资源
    最近更新 更多