2017-07-09 4 views
0

私はこれを何千回もやったことがありますが、私はここで何かを逃していることを知っています。私は別のものに一致する列によって私が持っているデータフレームをサブセット化したい。しかし、標準的なプロセスは動作していないようです。ここに私が持っているものがあります:Rで索引行がサブセット化されていない

a <- as.character(df1$col1) 
b <- names(df2) 
df2[(b %in% a), ] 

最後の行は何もしていません。エラーはありませんが、b %in% aビットは確かにすべてTRUEを返しません。

a[1:10] 
"2.5D"    "2D"    "2DFighter"  "3DPlatformer" "3DVision"   "4PlayerLocal"  "4X"    "Abstract"  "Action"   "Action-Adventure" 

b[1:10] 
"appid"   "2.5D"    "2D"    "4PlayerLocal" "6DOF"    "Action"   "Action-Adventure" "ActionRPG"  "Adventure"  "Anime" 

b[1:10] %in% a[1:10] 
FALSE TRUE TRUE TRUE FALSE TRUE TRUE FALSE FALSE FALSE 

names(df2[(b %in% a), ]) 
"appid"   "2.5D"    "2D"    "4PlayerLocal" "6DOF"    "Action"   "Action-Adventure" "ActionRPG"  "Adventure"  "Anime" 

私が望むのは、df1がdf1の一致する列によってサブセットされることです。 %in%と一致するベクトルを両方とも同じ文字フォーマットにしても、これが適切なアプローチだと言いたいと思います。しかし、円柱の部分集合は何もしていないようです。

ここで間違っていることはすぐに分かりますか?

+0

は '[、as.character(DF1ます$ COL1)]' DF2とあなたはおそらくサブセット 'df2'べきではないのですか?あなたが行名をフィルタリングしている限り、 '%in%'テストは余計です。 – cmaher

+1

'name(df2 [(b%in%a)、])'の ''コンマ 'は、 'names()'から返されたベクトルの** all **を与えています。 – Kevin

+1

df2 [(b%in%a)、]の代わりに 'df2 [、(b%in%a)]'を試してみてください。カンマの違いに注意してください。つまり、行ではなく列をサブセット化しています。 – rosscova

答えて

2

ここで重要なことは、df[a,b]を使用してサブセット化する場合、aサブセット行とbサブセット列を使用する場合です。

この(コメントで@Kevinにより述べたように):

​​

はすべての列を意味する、データ・フレームのうちのいくつかの行をサブセット化されているが依然として存在しています。代わりに列をサブセットするために、我々は必要です

df2[ ,(b %in% a) ] 
関連する問題