2012-09-01 169 views
4

我正在處理一個大約700 000行的data.frame。它包含來自twitter的statusupdates的id和相應的用戶名。我只想知道那裏有多少不同的用戶以及他們推送了多少次。所以我認爲這是一個使用表格的非常簡單的任務。但知道我注意到我得到了不同的結果。R頻率表包含0

最近我做了它的列轉換爲字符這樣

>freqs <- as.data.frame(table(as.character(w_dup$from_user)) 
>nrow(freqs) 
[1] 239678 

2個月前我做了這樣的

>freqs <- as.data.frame(table(w_dup$from_user) 
>nrow(freqs) 
[1] 253594 

我注意到,這樣的數據幀中包含有一個頻率的用戶名0.怎麼可能?如果用戶名在數據集中,則必須至少出現一次。

?表沒有幫助我。我也無法在較小的數據集上重現此問題。

我做錯了什麼。還是我誤解了表格的使用?

+0

我在我的問題中做了一個類似的錯誤,但我想在我的表中保留[零頻率計數](http://stackoverflow.com/q/13705060/610108)。 'table'產生一個應急表,'tabular'產生一個頻率表。 – ThomasH

回答

3

類型列的是這裏的問題,並牢記的因素水平保持不變子集劃分的數據幀時:

# Full data frame 
(df <- data.frame(x = letters[1:3], y = 1:3)) 
    x y 
1 a 1 
2 b 2 
3 c 3 
# Its structure - all three levels as it should be 
str(df) 
'data.frame': 3 obs. of 2 variables: 
$ x: Factor w/ 3 levels "a","b","c": 1 2 3 
$ y: int 1 2 3 
# A smaller data frame 
(newDf <- df[1:2, ]) 
    x y 
1 a 1 
2 b 2 
# But the same three levels 
str(newDf) 
'data.frame': 2 obs. of 2 variables: 
$ x: Factor w/ 3 levels "a","b","c": 1 2 
$ y: int 1 2 

所以第一列包含的因素。在這種情況下:

table(newDf$x) 

a b c 
1 1 0 

所有級別("a","b","c")考慮在內。這裏

table(as.character(newDf$x)) 

a b 
1 1 

他們不再是因素了。

+0

謝謝。現在我發現問題與關卡有關,但我不確定,爲什麼在我的表格源中出現更多關卡。我用你的例子(table(df [1:2,1]))你只使用表格的一部分,但我使用整個列。但我的df w_dup是另一個數據框的一個子集,我在調查期間縮減爲推文。水平是否保持不變我創建了一個全新的df? – supersambo

+0

@supersambo,是的,這是正確的,我也編輯了答案 – Julius