ave()
是该任务的功能:
df$max.by.id <- ave(df$value, df$id, FUN=max)
例:
df <- data.frame( id = c('A1','A2','A4','A2','A1','A4','A3','A2','A1','A3'), value = c(4,3,1,3,4,6,6,1,8,4)) df$max.by.id <- ave(df$value, df$id, FUN=max)
结果ave()
与原始值向量具有相同的长度(也是分组变量的长度).结果的值相对于分组变量到达正确的位置.有关更多信息,请阅读文档ave()
.
ave()
是该任务的功能:
df$max.by.id <- ave(df$value, df$id, FUN=max)
例:
df <- data.frame( id = c('A1','A2','A4','A2','A1','A4','A3','A2','A1','A3'), value = c(4,3,1,3,4,6,6,1,8,4)) df$max.by.id <- ave(df$value, df$id, FUN=max)
结果ave()
与原始值向量具有相同的长度(也是分组变量的长度).结果的值相对于分组变量到达正确的位置.有关更多信息,请阅读文档ave()
.
使用data.table
,您可以通过id
"内部"数据计算最大值,自动添加新计算的值(由id唯一):
library(data.table) setDT(df)[, max.by.id := max(value), by=id] df # id value max.by.id # 1: A1 4 8 # 2: A2 3 3 # 3: A4 1 6 # 4: A2 3 3 # 5: A1 4 8 # 6: A4 6 6 # 7: A3 6 6 # 8: A2 1 3 # 9: A1 8 8 #10: A3 4 6