2014-11-04 94 views
2

比方說,我們擁有的數據幀如何使用dplyr獲得計數?

df <- data.frame(x = c("a", "a", "b", "a", "c")) 

使用dplyr數,我們得到

df %>% count(x) 

    x n 
1 a 3 
2 b 1 
3 c 1 

我現在想要做對產出的正列計數。如果第n列命名爲m,我要查找的結果是

m n 
1 1 2 
2 3 1 

這怎麼可以用dplyr來完成?

非常感謝!

+2

你想總的n個或牛每獨特元素的頻率算? – 2014-11-04 20:31:53

+2

'n'的總數是不是'nrow(df)'? – davechilders 2014-11-04 20:51:07

+0

@beginneR:我的意思是n的每個獨特元素的頻率,並且已經更新了問題,以便更清楚。謝謝! – user2058387 2014-11-05 03:10:26

回答

4

dplyrcount(n)似乎有問題。

例如:

d <- data.frame(n = sample(1:2, 10, TRUE), x = 1:10) 
d %>% count(n) 

一種解決方法是重命名n

df %>% # using data defined in question 
    count(x) %>% 
    rename(m = n) %>% 
    count(m) 
+2

嗯,嗯,也許這是一個錯誤 – hadley 2014-11-04 22:44:33

+0

@DMC完成這項工作。謝謝! – user2058387 2014-11-05 03:33:38

+0

@hadley如果這是一個錯誤,或者如果有更優雅的解決方案,請告訴我們。 – user2058387 2014-11-05 03:34:34

1
sum((df %>% count(x))$n) 
##[1] 5 
0

如果你想數:

df %>% count(x) %>% summarise(length(n)) 
# length(n) 
#1   3 

如果你想總和:

df %>% count(x) %>% summarise(sum(n)) 
# sum(n) 
#1  5 
3

編輯:我錯了。沒有dplyr的最新版本,所以我沒有count函數。

隨着dplyr一個方法來計算是n()在你的榜樣,你會做以下,以獲得第一計數:

df <- data.frame(x = c("a", "a", "b", "a", "c")) 

df %>% group_by(x) %>% summarise(count=n()) 

然後,如果你想算特定的數,你可以做的事件:

df %>% group_by(x) %>% summarise(count=n()) %>% group_by(count) %>% summarise(newCount=n()) 

這是一個dplyr的方法。

+0

你仍然可以使用'count'。df%>%count(x)%>%group_by(n)%>%summarize(total = n()) – jazzurro 2014-11-05 00:31:53

+0

@jazzurro我同意。從來沒有說過你不能;) – stanekam 2014-11-05 00:37:09

+0

我正在進一步修剪線條,發現這是行不通的。 'df%>%count(x)%>%summarize(group_by(n),total = n())' – jazzurro 2014-11-05 00:40:12

1

如果您願意嘗試data.table,那可能是相當直接的。

df <- data.frame(x = c("a", "a", "b", "a", "c")) 
library(data.table) 
setDT(df)[, .N, by=x][, list(count_of_N=.N), by=N] 
# N count_of_N 
# 1: 3   1 
# 2: 1   2 
0

它不是純plyr但是這可能工作:

countr<-function(x){data.frame(table(x))} 
t<-count(df,x) 
countr(t[,2])