2015-05-29 64 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

相关问题