我有这种数据框:
df <- data.frame(a=c(1, 1, 1, 2, 2, 2), b=c(1, 2, 3, 1, 2, 3))
我想创建一个取决于a
和b
的列,还要创建一个仅取决于a
的列。
我尝试使用ddply
df1 <- ddply(df, c("a", "b"), summarise, c=a+b, d=length(a))
但length(a)
只返回一个,因为每个向量只有一个元素(a
和b
组合)。
如果我这样做
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
所以我为每个因子组合val
和a
计算了b
的总和,我想将新向量sum
的每个元素除以长度a==1
或a==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时,df
时a==1
和a==2
时有8个观察。