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
有什么区别?为什么会这样?
答案 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