【发布时间】: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 %>% group_by(Country) %>% mutate(duration = Year - first(Year)) -
谢谢,@akrun!这很棒。我是 R 的新手,花了几个小时试图弄清楚,但一定是在寻找错误的术语/流程。再次感谢!