2014-09-25 33 views
1

我想統計一下type有多少行,如果它們滿足條件x == 0。有點像一組由SQL有條件計數和分組依據R

下面是數據的一個例子

type x  
search 0 
NULL  0 
public 0 
search 1 
home  0 
home  1 
search 0 
+1

你可以用R代碼包含數據示例嗎?我很努力地理解你要求的內容以及你的示例如何適合... – CephBirk 2014-09-25 15:33:00

+0

當包括樣本輸入時,還包括期望的輸出。看看[如何製作一個可重複的例子](http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example) – MrFlick 2014-09-25 15:35:41

回答

8

我假設您想要查找特定條件(當變量具有某個值時)的行數。

如果是這種情況,那麼我想你有一個「x」作爲列中表示的變量。 「x」可以取多個值。假設你想找到多少行你的數據在那裏當x爲0。這可以通過這樣做:

nrow(subset(data, x=="0") 

「數據」是R中的數據集對象名稱

編輯:

我現在正在看到您編輯的數據框。您可以使用它來解決問題:

library(dplyr) 

df2 <- df %>% group_by(x,type) %>% tally() 

這給:

table(data$type, data$x) 
+0

非常感謝!我知道有一個非常簡單的解決方案:) – datacurious 2014-09-25 16:15:51

2

考慮到數據幀, df=data.frame(type=c('search','NULL','public','search','home','home','search'),x=c(0,0,0,1,0,1,0))

如果你想知道在第1列多少每個值的在列中的值零2,那麼你可以使用: table(df)[,1]

只要你只用1和0的努力得到了答案:

home NULL public search 
    1  1  1  2 
1

您也可以與dplyr包做

x type n 
1 0 home 1 
2 0 NULL 1 
3 0 public 1 
4 0 search 2 
5 1 home 1 
6 1 search 1 
3

您也可以使用sqldf包:

library(sqldf) 
df <- data.frame(type=c('search','NULL','public','search','home','home','search'),x=c(0,0,0,1,0,1,0)) 
sqldf("SELECT type, COUNT(*) FROM df WHERE x=0 GROUP BY type") 

這給出瞭如下結果:

type COUNT(*) 
1 NULL  1 
2 home  1 
3 public  1 
4 search  2 
0

鑑於你的數據是結構化的數據幀,下面的代碼具有更好的運行時間比上面給出的答案:

nrow(data[data$x=="0"]) 

您可以測試運行使用時間:

ptm <- proc.time() 
nrow(subset(data, x == "0")) 
proc.time() - ptm 

ptm <- proc.time() 
nrow(data[data$x=="0"])) 
proc.time() - ptm 

在我的情況下,運行時間快了大約15倍,有100萬行。