2017-07-19 4 views
1

intersectはデータフレームでは機能しませんので、dfAの行名がdfBの行名と一致するデータのみを使用してサブセットを使用してdfAのサブセットを作成しようとしています。 には5000行、dfBには3000があり、dfBの行名はすべてdfAの行名に存在するため、3000行になるはずです。データフレーム内の行名の交点(データのサブセット)?

以下は、データなしのdfAの列名を返します。

mysubset = subset(dfA, dfA[,0] %in% dfB[,0]) 
+0

'DFA小さなデータフレームを用いて、[(%のrownames(DFB)にrownames(DFA)%)を、] ' – Masoud

+1

' dplyr :: semi_join' –

+0

また、 'R'にインデックスゼロはなく、インデックスは1ベースです。 'dfA [、0]'と 'dfB [、0]'は存在しません。 –

答えて

0

rownames機能、そして一連の比較条件は、あなたが期待したものでしょう。

例、

dfA <- data.frame(x = 1:5, 
        y = 6:10, 
        row.names = letters[1:5]) 
# Show dfA 
dfA 
    x y 
a 1 6 
b 2 7 
c 3 8 
d 4 9 
e 5 10 


dfB <- data.frame(x = 1:5, 
        y = 6:10, 
        row.names = letters[3:7]) 

# Show dfB 
dfB 
    x y 
c 1 6 
d 2 7 
e 3 8 
f 4 9 
g 5 10 

いくつかの共有rownames有する溶液

# Subset rows with matching rownames 

dfA[ rownames(dfA) %in% rownames(dfB), ] 
    x y 
c 3 8 
d 4 9 
e 5 10 
+0

私は経済的だからこの答えを選びました。 Masoudの答えも同様です。なぜ私は 'rownames'についてのすべてを忘れていたのか分かりません。私は 'mydf [、0]'の使用に集中していたに違いない。ありがとう! – user8121557

1

両方のdata.framesには、rownamesに基づいてサブセットを取得する必要があります。

dfA[which(rownames(dfA) %in% rownames(dfB)),] 
dfA

から列名がdfBの行名(which)にあり、dfAdfA[...])にデータを取得するためにインデックスを戻し、このチェックします。

あなたが(計算上、もう少しかかります)お使いのソリューションに固執する場合:あなたはrownamesにアクセスできるようになります

subset(dfA, rownames(dfA) %in% rownames(dfB)) 
関連する問題