我对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:

我想知道x轴的v_rank的可变性,以及每个组的y轴的时间,因此我需要计算最小值,mee,max,sd for v_rank值,v_rank value for 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]

我的问题

我不知道如何通过步骤1->步骤2:/

如果可以像步骤3中的我的示例那样按v_cut进行分组吗?

是否有可能使用ddply的“子集”选项制作相同的东西?

再一次,非常感谢您的帮助!

更新1:

我有一个答案,可以将步骤1转到步骤2:

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 dataframe中使用v_cut,我该如何处理ddply?有这样做的选择吗?或与初始df和键= v_idn合并以将列v_cut添加到sumdata是唯一的好答案?

有帮助吗?

解决方案

您真的不需要Plyr,您可以使用 reshape

## Pull what you need
dfx <- df[c("v_seed", "v_time","v_rank","v_perco")]
## Bring in your cuts
dfx <- data.frame(dfx, ifelse(df$v_perco > 10,"(10,20]", "[0,10)")))
## Rename v_cut
colnames(dfx)[ncol(dfx)] <- "v_cut"       
## Melt it.    
dfx <- melt(dfx, id=c("v_cut", "v_seed", "v_time"))
## Cast it.
dfx <- cast(dfx, v_cut + v_time + v_seed ~ variable, c(mean,min,max,sd))

如果您只需要平均值,请用以下方式替换最后一行。

dfx <- cast(dfx, v_cut + v_time + v_seed ~ variable, mean)

键入“ DFX”,您将看到一个数据框,其中包含所需内容。

其他提示

您只是在语法上遇到问题:

## Add your cut
df.new <- data.frame(df, ifelse(df$v_perco > 10,"(10,20]", "[0,10)"))
## Rename v_cut
colnames(df.new)[ncol(df.new)] <- "v_cut"   

## Careful here read the note below
df.new <- ddply(df.new, .(v_idn, v_time), function(x) unique(data.frame(
mean =  mean(x$v_rank),
v_cut = x$v_cut
)))

或者:

ddply(df.new, .(v_idn, v_time), summarise, mean=mean(v_rank))

使用“。(v_idn,v_time)”您告诉ddply,对于v_idn和v_time的每种组合,您都希望它计算V_Rank的平均值。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top