2017-07-19 4 views
1

Puisque intersect ne fonctionne pas avec les données, j'essaye d'utiliser le sous-ensemble pour créer un sous-ensemble de dfA avec seulement des données pour lesquelles les noms de ligne de dfA correspondent aux noms de ligne de dfB. Je devrais finir avec 3000 lignes parce que dfA a 5000 lignes et dfB a 3000, et tous les noms de rangée de dfB existent dans les noms de rangée de dfA.Intersection des noms de lignes dans les données (sous-ensemble des données)?

Ce qui suit renvoie juste les noms de colonne dfA sans aucune donnée.

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

'DFA [qui (rownames (DFA)% en% rownames (DFB))]' – Masoud

+1

' dplyr :: sem_join' –

+0

De plus, il n'y a pas d'index zéro dans 'R', les index sont basés sur 1. 'dfA [, 0]' et 'dfB [, 0]' n'existent pas. –

Répondre

0

La fonction rownames vous donnera accès aux rownames, la condition de comparaison réglée fera ce que vous attendiez .

exemple, en utilisant de petits blocs de données avec des rownames partagées

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 

Solution

# Subset rows with matching rownames 

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

J'ai choisi cette réponse parce que c'est économique; Bien que la réponse de Masoud fonctionne aussi bien. Je ne sais pas pourquoi j'ai tout oublié des 'rownames'; Je devais être tellement concentré sur l'utilisation de 'mydf [, 0]'. Merci! – user8121557

1

Vous devriez obtenir un sous-ensemble basé sur rownames pour les deux noms de données.

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

Ce qui vérifie les noms de lignes de dfA sont dans les noms de lignes de dfB (which) et renvoie les indices pour obtenir les données dans dfA (dfA[...]).

Si vous voulez coller à votre solution (qui coûte un peu plus, informatiquement):

subset(dfA, rownames(dfA) %in% rownames(dfB))