我正在处理一个大约70万行的data.frame。它包含来自twitter的statusupdates和相应用户名的ID。我只是想知道有多少不同的用户在那里以及他们发推文的次数。所以我认为使用表格这是一个非常简单的任务。但是知道我发现我得到了不同的结果。
最近我将列转换为像这样的字符
>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 :(得分: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
他们不再是因素了。