4

私は約 700 000 行の data.frame に取り組んでいます。これには、statusupdates の 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 のユーザー名が含まれていることに気付きました。ユーザー名がデータセットに含まれている場合は、少なくとも 1 回出現する必要があります。

?テーブルは私を助けませんでした。小さなデータセットでこの問題を再現することもできませんでした。

私が間違っていること。または、テーブルの使用法を誤解していますか?

4

1 に答える 1

4

ここで問題となるのは列のタイプです。また、データフレームをサブセット化する場合、要素のレベルは同じままであることに注意してください。

# 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 

それらはもはや要因ではありません。

于 2012-09-01T10:39:59.950 に答える