2014-01-10 58 views
0

一個數據幀的列做計數我有一個數據幀「SAMP」與列(姑且稱之爲「評級」),這需要幾個值(假設執行下列操作之一:「好」,「中」,‘壞’。)爲R中

我想組通過在其他幾列和計算的頻率‘好’,‘中等’和‘壞’,並在新的列報的頻率。 (因此,也許COL1是電影一年,COL2是流派,然後應該有三個多列告訴你有多少每種等級的有每年和流派。)

ddply(samp,c("col1","col2"), summarize, 
     good=table(samp$rating)["good"], 
     medium=table(samp$rating)["medium"], 
     bad=table(samp$rating)["bad"]) 

的問題是(我認爲)我定義的函數不是ddply輸出的組,而是samp的常量函數。我怎樣才能在這裏定義函數,使它們成爲組的功能?

我嘗試使用匿名函數:

ddply(samp,c("col1","col2"), summarize, 
     good=function(df)table(df$rating)["good"], 
     medium=function(df)table(df$rating)["medium"], 
     bad=function(df)table(df$rating)["bad"]) 

我永遠不能得到它雖然工作。我認爲我得到的最大錯誤是

Error in output[[var]][rng] <- df[[var]] : 
incompatible types (from closure to logical) in subassignment type fix 

所以把它放在我身上。在我嘗試使用948506 ddply和table的組合時,沒有出現什麼奇怪的簡單解決方案?謝謝。

+0

你只是想計數?那麼'length(samp $ rating =='good')怎麼樣? – rawr

+0

@rawr這個命令將返回邏輯向量的長度並且不計數'TRUE'。 –

+0

意味着總和,科特迪瓦哦 – rawr

回答

2

只是刪除的samp$所有實例裏面ddply,它會工作:

ddply(samp,c("col1","col2"), summarize, 
    good=table(rating)["good"], 
    medium=table(rating)["medium"], 
    bad=table(rating)["bad"]) 
+0

哎呀,我可以發誓,我試過,但沒錯,它就是這麼簡單。感謝您解決這個問題! – rschwieb

1

通用數據:

samp <- data.frame(rating=c("bad","medium","good","bad","medium","good"), 
        col1=c(2007,2010,2007,2009,2010,2010), 
        col2=c("fiction","fiction","fiction","drama","drama","drama")) 

代碼(你不應該使用samp$前列的名稱):

ddply(samp,c("col1","col2"), summarize, 
     good=sum(rating == "good"), 
     medium=sum(rating == "medium"), 
     bad=sum(rating == "bad")) 

輸出:

col1 col2 good medium bad 
1 2007 fiction 1  0 1 
2 2009 drama 0  0 1 
3 2010 drama 1  1 0 
4 2010 fiction 0  1 0 
+0

Sven獲得了修復我的啞表()使用情況的檢查,但是我想感謝您的新版本。我喜歡輸出稍好,我可能會應用這種方法。非常感謝你! – rschwieb