我有一个关于ddply和subset的问题。
我的数据框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)
第一步:
我有一个等间隔的列表,其间隔被切割为如下形式:
myinterval <- cut_interval(c(15,5,6,1,17,14), length=10)
我将为您进行翻译。该内容涉及编程。请保留HTML标签,仅进行翻译。
所以我有两个等级:[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 值的最小值、平均值、最大值和标准差,类似于以下内容:
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]
我的问题
我不知道如何通过第一步到第二步 :/
是否可以像第三步中的示例那样按 v_cut 进行分组?
是否可以使用 ddply 的“subset”选项来完成相同的操作?
再次感谢你这位伟大的 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实现?是否有选项可以实现这一点?还是将初始数据框与键值v_idn合并以将v_cut列添加到sumData是唯一的好答案?