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

通过对data.frame中的另一列求和来创建月份列,r,sapply,R,Sapply,在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,

在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]))

df$MONTH只需简单调用
ave
,就可以完成您想要的操作,并将一列单独分组

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

df$MONTH看看。如果没有您的起始数据和预期结果的最小示例,人们将很难回答这个问题。R是基于一的,
0:i
变成
1:i
。另外,您是否希望
MONTH
具有连续的值,
1:n
其中
n
ORIG_ROW
每组的行数?@RuiBarradas是的,我注意到它对0:I和1:I的作用相同,我将在代码中进行调整,因为R是基于一的。是的,我希望“月”具有您所说的连续值。现在您的“能够处理”代码没有运行-您缺少了一个
]
和一个
。这很有效,非常感谢!抱歉没有提供data.frame以启动。:)
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")