我有以下数据框
v1 v2 v3 a 2 5 b 5 3 c 2 1 d 2 1 e 1 2 a 2 4 a 8 1 e 1 6 b 0 1 c 2 8 d 1 5
使用R,我想计算V1的每个唯一值,即max V3和min V3之间的差值。 预期:
Val max_min a “5-1” b “3-1” c “8-1” d “5-1” e “6-2”
我正在尝试使用
ddply(fil1, c("V1"), summarise, max(V3) - min(V1))但是,没有预期的结果。它在max_min中给出相同的值:整个数据帧的max(V3) - min(V3),而不是组。 我也试过
average,但没有成功。
答案 0 :(得分:3)
或在基地R,
MAX = aggregate(df$v3, list(df$v1), max)
MIN = aggregate(df$v3, list(df$v1), min)
MAX[,2] - MIN[,2]
[1] 4 2 7 4 4
以上的一个衬里将是,
aggregate(v3 ~ v1, df, FUN = function(i)max(i) - min(i))
# v1 v3
#1 a 4
#2 b 2
#3 c 7
#4 d 4
#5 e 4
我们也可以使用tapply
来显示输出,如下所示,
with(df, tapply(v3, list(v1), function(i) max(i)-min(i)))
#a b c d e
#4 2 7 4 4
答案 1 :(得分:0)
你也可以去split
:
lapply(split(df$v3, df$v1), function(a) max(a)-min(a))
# $a
# [1] 4
# $b
# [1] 2
# $c
# [1] 7
# $d
# [1] 4
# $e
# [1] 4
如果你坚持看到你定义的输出:
ls <- lapply(split(df$v3, df$v1), function(a) max(a)-min(a))
data.frame(Val=names(ls), max_min=unlist(ls))
# Val max_min
#a a 4
#b b 2
#c c 7
#d d 4
#e e 4