通过对 data.frame 中的另一列求和来创建月份列

create month column by summing over another column in data.frame

在 R 中,我试图创建一个月份列来绘制我的数据,方法是对另一列求和,该列对我正在使用的每个人群具有相同的值,例如:

NAME ORIG_ROW MONTH
POP1 1        1
POP1 1        2
POP1 1        3
POP2 2        1
POP2 2        2
POP2 2        3

我可以通过以下方式做到这一点:

df$MONTH <- sapply(1:nrow(df), function(i) (colSums(df[0:i, c('ORIG_ROW') == df$ORIG_ROW[i]))

但是,当我尝试将此代码应用于大型数据集(~825k 观测值)时,它的效率很低。

有人对如何提高这段代码的效率有什么建议吗?

只需调用 ave,将列单独分组即可完成您想要的操作。

df$MONTH <- with(df, ave(ORIG_ROW, ORIG_ROW, FUN = seq_along))

数据。

df <-
structure(list(NAME = structure(c(1L, 1L, 1L, 2L, 2L, 2L), .Label = c("POP1", 
"POP2"), class = "factor"), ORIG_ROW = c(1L, 1L, 1L, 2L, 2L, 
2L)), row.names = c(NA, -6L), class = "data.frame")