通过对 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")
在 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")