2012-09-01 121 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