R - ddply通过两个因子之一提取值

时间:2016-12-11 11:35:10

标签: r plyr

我有这种数据框:

df <- data.frame(a=c(1, 1, 1, 2, 2, 2), b=c(1, 2, 3, 1, 2, 3))

我想创建一个取决于ab的列,还要创建一个仅取决于a的列。

我尝试使用ddply

df1 <- ddply(df, c("a", "b"), summarise, c=a+b, d=length(a))

length(a)只返回一个,因为每个向量只有一个元素(ab组合)。

如果我这样做

df1 <- ddply(df, c("a", "b"), summarise, c=length(df$a))

我得到整个a向量(长度= 6)。

我想访问a,只取决于我在ddply中使用的两个变量中的一个。可能吗?我不应该使用summarise吗?

修改

我可能过于简化了这个例子。我需要按两个因子分组来计算这两个因子的每个组合的总和以及根据第一个因子的矢量长度。这是一个新的例子:

> df <- data.frame(a=c(1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2),
                 b=c(1, 3, 3, 1, 2, 3, 3, 2, 3, 1, 2, 3, 2, 3),
                 val=c(0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1))
   a b val
1  1 1   0
2  1 3   1
3  1 3   1
4  1 1   1
5  1 2   0
6  1 3   0
7  2 3   1
8  2 2   0
9  2 3   0
10 2 1   0
11 2 2   1
12 2 3   1
13 2 2   1
14 2 3   1

> ddply(df, c("a", "b"), summarise, sum=sum(val))

  a b sum
1 1 1   1
2 1 2   0
3 1 3   2
4 2 1   0
5 2 2   2
6 2 3   3

所以我为每个因子组合vala计算了b的总和,我想将新向量sum的每个元素除以长度a==1a==2。所以结果将是

  a b sum wanted
1 1 1   1 0.1666667 (1/6)
2 1 2   0 0.0000000 (0/6)
3 1 3   2 0.3333333 (2/6)
4 2 1   0 0.0000000 (0/8)
5 2 2   2 0.25      (2/8)
6 2 3   3 0.375     (3/8)

a==1我除以6而a==2除以8时,dfa==1a==2时有8个观察。

0 个答案:

没有答案