1

このスニペット:

names<-c("Alice","Bob","Charlie")
ages<-c(25,24,25)
friends<-data.frame(names,ages)
a25 <- friends[friends$age==25,]
a25
table(a25$names)

この出力が得られます

    names ages
1   Alice   25
3 Charlie   25

  Alice     Bob Charlie 
      1       0       1

a25では、データ フレームに "Bob" が含まれていないのに、なぜ "Bob" が出力されるのでしょうか。table(コマンドから)次のような出力が期待されます。

  Alice  Charlie 
      1        1 

私は何が欠けていますか?

私の環境:

R version 2.15.2 (2012-10-26)
Platform: i386-w64-mingw32/i386 (32-bit)
4

1 に答える 1

1

この質問はコメントに答えがあるようです。この回答は、1 つの追加のアプローチを共有し、コメントからの提案を統合します。

あなたが説明する問題は次のとおりです。「a25$names」変数に「Bob」はありませんが、使用するtableと「Bob」が表示されます。これは、元の列に存在するレベルが保持されているためです。

table(a25$names)
# 
#   Alice     Bob Charlie 
#       1       0       1 

幸いなことに、次のdroplevelsような状況を処理する関数があります。

table(droplevels(a25$names))
# 
#   Alice Charlie 
#       1       1 

このdroplevels関数data.frameは、次のことを実行できるようにするためにも機能します。

a25alt <- droplevels(friends[friends$ages==25,])
a25alt
#     names ages
# 1   Alice   25
# 3 Charlie   25
table(a25alt$names)
# 
#   Alice Charlie 
#       1       1 

コメントで述べたように、 と も見てas.characterくださいfactor

table(as.character(a25$names))
table(factor(a25$names))
于 2014-07-10T17:21:44.880 に答える