我试图在R.中使用tapply()表示数据帧。在使用索引引用时获取错误

时间:2016-11-28 15:34:29

标签: r tapply

a<-c(1,2,3)
b<-c("apple","orange","fruits")
f<-c(10,12,30)
df<-data.frame(a,b,f)

当我跑步时:

prices<-tapply(df[1]*df[3],df[2],cumsum)

我收到此错误:

#Error in tapply(df[1] * df[3], df[2], cumsum) : 
#  arguments must have same length

但是,如果我使用:

tapply(a*f,b,cumsum)

我得到了输出:

#apple fruits orange 
#   10     90     24 

有什么区别?为什么会这样?

1 个答案:

答案 0 :(得分:0)

tapply一般要求接收两个向量参数和函数,但是通过使用单个方括号来子集,你给它两个列表。第二个(INDEX)在内部从列表(长度1)转换为因子(长度3),因此与第一个(X)的长度不同。 Unlisting是一个选项,但是@ emilliman5指出最好引用数据表的列。

> tapply(unlist(df[1]*df[3]),df[2],cumsum)
b
 apple fruits orange 
    10     90     24 
> tapply(df[,1]*df[,3],df[,2],cumsum)
 apple fruits orange 
    10     90     24