如何在R中创建整数序列?

kxkpmulp  于 2023-07-31  发布在  其他
关注(0)|答案(3)|浏览(131)

我有一个这样的dataframe:

id    year
001   1988
001   1988
001   1988
001   1988
001   1988
002   1972
002   1972
002   1972
002   1972

字符串
对于每个id,我想将变量year转换为从第一次观察开始的序列,在每个连续的行中增加1。所需输出:

id    year
001   1988
001   1989
001   1990
001   1991
001   1992
002   1972
002   1973
002   1974
002   1975


我该怎么做?tidyverse解决方案将是优选的。谢谢
我的数据:

df <- data.frame(id = c("001", "001", "001", "001", "001", "002", "002", "002", "002"),
                 year = c(1988, 1988, 1988, 1988, 1988, 1972, 1972, 1972, 1972))

blpfk2vs

blpfk2vs1#

seq

library(dplyr)
df %>% 
  mutate(year = seq(first(year), length.out = n()), .by = id)

#   id year
# 1  1 1988
# 2  1 1989
# 3  1 1990
# 4  1 1991
# 5  1 1992
# 6  2 1972
# 7  2 1973
# 8  2 1974
# 9  2 1975

字符串

svgewumm

svgewumm2#

base解决方案:

transform(df, year = ave(year, id, FUN = \(x) seq_along(x) + x[1] - 1))

#   id year
# 1  1 1988
# 2  1 1989
# 3  1 1990
# 4  1 1991
# 5  1 1992
# 6  2 1972
# 7  2 1973
# 8  2 1974
# 9  2 1975

字符串

zxlwwiss

zxlwwiss3#

为了完整起见,使用data.table方法

library(data.table)

setDT(df)

df[, year := .SD + 1:.N - 1, id]

字符串
或者如果不是所有年份最初每个id都相同,则需要first(year)

df[, year := first(year) + 1:.N - 1, id]

相关问题