2011-06-15 85 views
1

我試圖使用Reshape庫中的cast()來投射數據,但我得到了意想不到的結果。我開始有大量的數據中有一個數據幀,並all_ia[all_ia$Student.ID == 102050,]回報使用Cast()發生意外的結果

66  102050  1  Mar 
67  102050  0  Dec 
68  102050  1  May 
69  102050  0  Feb 

當變量分別爲Student.ID,Proficiency.Level和testmonth。

有一些Student.IDs與第5個月9月

當我運行all_ia.cast <- cast(all_ia, Student.ID ~ testmonth, value=c("Proficiency.Level"), fill=c("NA"))然後運行all_ia.cast[all_ia.cast$Student.ID == 102050,],我得到意想不到的結果:

1325 102050 1 1 1 1 NA 

其中變量Student.ID, 12月,2月,3月,5月,9月。當我運行cast()時,有一個警告,其中顯示Aggregation requires fun.aggregate: length used as default

我的問題是,爲什麼fun.aggregate是必需的,爲什麼變量中的Dec和Feb變量等於1而不是0?

謝謝你的幫助!

回答

1

這是因爲您的鑄造公式Student.Id ~ tesmonth不包含data.frame中的所有變量,即不包括Proficiency.Level

這意味着,一般來說,演員必須執行聚合,並且聚合公式默認爲length

您似乎有一個特殊情況,每個學生月份和熟練程度之間存在一對一的關係。因此,您應該選擇一個保留數據的聚合功能,例如服用mean下面應該工作:

cast(all_ia, Student.ID ~ testmonth, value=mean("Proficiency.Level")) 

你沒有提供的測試數據,所以這不是測試。

+0

謝謝!你上面建議的演員沒有爲信件工作,但是'all_ia.cast < - cast(all_ia,Student.ID〜testmonth,value = c(「Proficiency.Level」),fun.aggregate = mean)'做了。 – 2011-06-15 14:23:55

+0

作爲後續問題,爲什麼在存在一對一關係時調用聚合函數?我覺得我過去沒有遇到過這個問題,並且有了這種關係的其他數據。 – 2011-06-15 14:41:20

+0

我不知道。 'cast'是否有可能猜測,但你有重複的行? – Andrie 2011-06-15 14:42:46