2016-11-28 32 views
0
a<-c(1,2,3) 
b<-c("apple","orange","fruits") 
f<-c(10,12,30) 
df<-data.frame(a,b,f) 

引用時,當我運行R.Getting錯誤使用tapply()爲數據幀:我試圖用指數

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 

有什麼區別?這是爲什麼發生?

+4

您還沒有正確地引用的列,它應該是'DF [3] * DF [,4],DF [2]' – emilliman5

+1

或'DF [[3]]'等 –

回答

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