2015-05-29 96 views

回答

5

您可以添加一個虛擬列,或使用rownames聚集於:

aggregate(rownames(mydf) ~ ., mydf, length) 
# col1 col2 rownames(mydf) 
# 1 A 1    1 
# 2 B 1    2 
# 3 C 1    2 
# 4 A 2    2 
# 5 C 2    1 

table也工作正常,但將報告可能不會在你的數據爲「0」的組合:

data.frame(table(mydf)) 
# col1 col2 Freq 
# 1 A 1 1 
# 2 B 1 2 
# 3 C 1 2 
# 4 A 2 2 
# 5 B 2 0 
# 6 C 2 1 

另外一個不錯的方法是使用 「data.table」:

library(data.table) 
as.data.table(mydf)[, .N, by = names(mydf)] 
+0

刪除了我的答案,它也使用data.table,因爲你把它全部合併在一個帖子中:),我將使用setDT而不是as.data.table並命名該列appropietly:'setDT(df)[,。(「Frequency 「= .N),by =。(col1,col2)]' – grrgrrbla

+0

@grrgrrbla,感謝您的評論,但(1)我更喜歡不使用'setDT'修改其他人的數據,除非*我知道*那*他們知道*做了什麼,(2)重新命名列是一項非常標準的任務,在我看來,這不是對這裏提出的問題至關重要。 – A5C1D2H2I1M1N2O1R2T1

+0

(我知道這是個人喜好的問題。) – A5C1D2H2I1M1N2O1R2T1

2

如果你的數據是

col1 <- c("A","A","A","B","B","C","C","C") 
col2 <- c(1,2,2,1,1,1,1,2) 
df <- data.frame(col1,col2) 

可以使用dplyr

1)group_by兩個兩個變量,因爲你的輸出應該包括他們的每個組合

2)數量數量對每個組的觀察使用n()

library(dplyr) 
df %>% group_by(col1,col2) %>% summarize(frequency=n()) 


# output 
    col1 col2 frequency 
1 A 1   1 
2 A 2   2 
3 B 1   2 
4 C 1   2 
5 C 2   1 
+2

這可以縮短爲:'df%>%count(col1,col2)' –

+0

thx爲您的評論 – rmuc8

相關問題