【问题标题】:R Frequency table containing 0R 频率表包含 0
【发布时间】:2012-09-01 10:30:38
【问题描述】:

我正在处理一个大约有 700 000 行的 data.frame。它包含状态更新的 id 和来自 twitter 的相应用户名。我只想知道那里有多少不同的用户以及他们发了多少次推文。所以我认为这是一个使用表格的非常简单的任务。但要知道我注意到我得到了不同的结果。

最近我将列转换为这样的字符

>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 的用户名。这怎么可能?如果用户名在数据集中,它必须至少出现一次。

?table 对我没有帮助。我也无法在较小的数据集上重现此问题。

我做错了什么。还是我误解了表格的使用?

【问题讨论】:

  • 我在我的问题中犯了一个类似的错误,尽管我想在我的表中keep the zero-frequency countstable 生成列联表,tabular 生成频率表。

标签: r frequency


【解决方案1】:

列的类型是这里的问题,还要记住,在对数据框进行子集化时,因素的水平保持不变:

# 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 

它们不再是因素。

【讨论】:

  • 谢谢。现在我看到问题与级别有关,但我不太确定,为什么级别比我的表源中出现的级别多。我您的示例 (table(df[1:2, 1])) 您只使用了表格的一部分,但我使用了整个列。但是我的 df w_dup 是另一个数据框的子集,我在调查期间将其简化为推文。我创建了一个全新的 df,级别是否保持不变?
猜你喜欢
  • 2021-12-02
  • 2016-12-09
  • 1970-01-01
  • 2014-05-14
  • 1970-01-01
  • 2021-02-24
  • 2021-06-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多