2015-12-14 57 views
2

數據包含兩個變量:id和grade。每個檔案可以有多個記錄 。將數據幀整形爲寬幅

dat <- data.frame(id = c(1,1,1,2,2,2,2,3,3,4,5,5,5), 
        grade = c("a", "b", "c", "a", "a", "b", "b", "d", "f", "c", "a", "e", "f")) 

我希望將數據重新塑造成一個寬的形狀,使得每個ID只有一個記錄 和每一個獨特的品位成爲一列。根據每個ID的等級,每列的值爲0或1, 。

最終的數據集的樣子:

id a b c d e f 
1 1 1 1 0 0 0 
2 1 1 0 0 0 0 
3 0 0 0 1 0 1 
4 0 0 1 0 0 0 
5 1 0 0 0 1 1 

我想這一點,但沒有運氣。

n.dat <- reshape(dat, timevar = "grade",idvar = c("id"),direction = "wide") 
+3

也許'+(table(dat)> 0)'? –

+0

謝謝,@DavidArenburg。 – user9292

回答

6

你可以簡單地table的值,然後將其轉換爲邏輯基礎上> 0條件,然後使用+元運算符轉換回數字(或者,如果你想少golfed,通過簡單地+ 0

+(table(dat) > 0) 
#  grade 
# id a b c d e f 
# 1 1 1 1 0 0 0 
# 2 1 1 0 0 0 0 
# 3 0 0 0 1 0 1 
# 4 0 0 1 0 0 0 
# 5 1 0 0 0 1 1 
相關問題