我想从该子集中的每个值中减去数据帧的每个子集中的最小值,即
A <- c(1,3,5,6,4,5,6,7,10)
B <- rep(1:4, length.out=length(A))
df <- data.frame(A, B)
df <- df[order(B),]
Run Code Online (Sandbox Code Playgroud)
减法会给我:
A B
1 0 1
2 3 1
3 9 1
4 0 2
5 2 2
6 0 3
7 1 3
8 0 4
9 1 4
Run Code Online (Sandbox Code Playgroud)
我认为你显示的输出不正确.无论如何,根据你的解释,我认为这就是你想要的.这使用ave基本功能:
within(df, { A <- ave(A, B, FUN=function(x) x-min(x))})
A B
1 0 1
5 3 1
9 9 1
2 0 2
6 2 2
3 0 3
7 1 3
4 0 4
8 1 4
Run Code Online (Sandbox Code Playgroud)
当然还有其他替代品,如plyr和data.table.