我有一个数据框,包含多次运行实验的结果,每个实验用作一个日志,有自己的升序计数器.我想在数据框中添加另一列,该列具有下面示例中iteration每个不同值的最大值experiment.num:
df <- data.frame(
iteration = rep(1:5,5),
experiment.num = c(rep(1,5),rep(2,5),rep(3,5),rep(4,5),rep(5,5)),
some.val=42,
another.val=12
)
Run Code Online (Sandbox Code Playgroud)
在此示例中,额外列将如下所示(因为所有子集具有相同的最大值iteration):
df$max <- rep(5,25)
Run Code Online (Sandbox Code Playgroud)
我目前使用的天真解决方案是:
df$max <- sapply(df$experiment.num,function(exp.num) max(df$iteration[df$experiment.num == exp.num]))
Run Code Online (Sandbox Code Playgroud)
我还习惯于sapply(unique(df$experiment.num), function(n) c(n,max(df$iteration[df$experiment.num==n])))构建另一个框架,然后我可以将其与原始框架合并,但这两种方法看起来都比必要的复杂.
该experiment.num列是一个因素,所以我想我可以利用它来避免迭代地为所有行执行这种天真的子集.
是否有更好的方法来获取a的子集的最大值列data.frame?