我对 ddply 和子集有疑问。
我有这样的数据框 df :
df <- read.table(textConnection(
" id v_idn v_seed v_time v_pop v_rank v_perco
1 15 125648 0 150 1 15
2 17 125648 0 120 2 5
3 18 125648 0 100 3 6
4 52 125648 0 25 4 1
5 17 125648 10 220 1 5
6 15 125648 10 160 2 15
7 18 125648 10 110 3 6
8 52 125648 10 50 4 1
9 56 -11152 0 250 1 17
10 15 -11152 0 180 2 15
11 18 -11152 0 110 3 6
12 22 -11152 0 5 4 14
13 56 -11152 10 250 1 17
14 15 -11152 10 180 2 15
15 22 -11152 10 125 3 14
16 18 -11152 10 120 4 6 "), header=TRUE)
第一步 :
我有一个与 cut_interval 等间隔的列表,如下所示:
myinterval <- cut_interval(c(15,5,6,1,17,14), length=10)
所以我在这里有两个级别:[0,10) 和 (10,20]
第二步 :
我希望每个组/类都由我在 v_cut 中的两个级别定义......就像这样:
id v_idn v_seed v_time v_pop v_rank v_perco v_cut
1 15 125648 0 150 1 15 (10,20]
2 17 125648 0 120 2 5 [0,10)
3 18 125648 0 100 3 6 [0,10)
4 52 125648 0 25 4 1 [0,10)
5 17 125648 10 220 1 5 [0,10)
6 15 125648 10 160 2 15 (10,20]
7 18 125648 10 110 3 6 [0,10)
8 52 125648 10 50 4 1 [0,10)
9 56 -11152 0 250 1 17 (10,20]
10 15 -11152 0 180 2 15 (10,20]
11 18 -11152 0 110 3 6 [0,10)
12 22 -11152 0 5 4 14 (10,20]
13 56 -11152 10 250 1 17 (10,20]
14 15 -11152 10 180 2 15 (10,20]
15 22 -11152 10 125 3 14 (10,20]
16 18 -11152 10 120 4 6 [0,10)
第 3 步:
我想知道每个组 v_cut 的 x 轴的 v_rank 和 y 轴的时间的可变性,所以我需要用类似的东西计算 v_rank 值的 min、mean、max、sd
ddply(df, .(v_cut,v_time), summarize ,mean = mean(v_rank), min = min(v_rank), max = max(v_rank), sd = sd(v_rank))
*想要的结果:*
id v_time MEAN.v_rank ... v_cut
1 0 2.25 (10,20]
2 0 2.42 [0,10)
3 10 2.25 [0,10)
4 10 2.42 (10,20]
我的问题
我不知道如何通过第 1 步 -> 第 2 步:/
如果可以像我在步骤 3 中的示例那样按 v_cut 分组?
是否有可能用 ddply 的“子集”选项做同样的事情?
再一次,非常感谢您的帮助伟大的 R 大师!
更新 1:
我有一个答案去 step1 到 step2 :
df$v_cut <- cut_interval(df$v_perco,n=10)
我正在使用 plyr,但在这种情况下可能有更好的答案?
回答到第 2 步到第 3 步?
更新 2:
Brandon Bertelsen 用 melt + cast 给了我一个很好的答案,但现在(要理解)我想用 plyr 和 ddply 进行相同的操作 .. 得到不同的结果:
id v_idn v_time MEAN.v_rank ... v_cut
1 15 0 2.25 (10,20]
2 15 10 2.45 (10,20]
2 17 0 1.52 [0,10)
2 17 10 2.42 [0,10)
etc.
我正在尝试这样的事情:
r('sumData <- ddply(df, .(v_idn,v_time), summarize,min = min(v_rank),mean = mean(v_rank), max = max(v_rank), sd=sd(v_rank))')
但我想在我的 sumData 数据框中有 v_cut ,我该如何处理 ddply ?有没有办法做到这一点?或者与初始 df 和 key = v_idn 合并以将列 v_cut 添加到 sumData 是唯一好的答案?