Podczas próby uzyskania danych nadających się do analizy, nie mogę zrobić tego poprawnie. Załóżmy, że mam zestawy danych w tej formie:Wyszukiwanie wspólnych wierszy w R
df1
V1 V2df1
a H
b Y
c Y
df2
V1 V2df2
a Y
j H
b Y
i kolejne trzy (łącznie 5 zestawów danych o różnych długościach). Co staram się zrobić, to następujące. Najpierw muszę znaleźć wszystkie wspólne elementy z pierwszej kolumny (V1) - w tym przypadku są to: a, b. Następnie, zgodnie z tymi wspólnymi elementami, próbuję utworzyć połączony zestaw danych, w którym wartości V1 będą wspólne dla wszystkich pięciu zestawów danych, a wartości z innych kolumn będą dołączane w tym samym wierszu. Tak, aby wyjaśnić na przykładzie, mój wynik powinien wyglądać mniej więcej tak:
V1 V2df1 V2df2
a H Y
b Y Y
udało mi się dostać jakiś kod działa, ale apperently wyniki nie są poprawne. Co zrobiłem: przeczytać wszystkie wiersze z wszystkich plików do zmiennych (Przykład: a<-df1[,1]
i tak dalej) i znaleźć wspólne wiersze jak:
red<-Reduce(intersect, list(a,b,c,d,e))
potem filtrowane konkretnych zestawów danych, takich jak:
df1 <- unique(filter(df1, V1 %in% red))
I zamówione każdy zestaw danych zgodnie z rzędu:
df1<-data.frame(df1[with(df1, order(V1)),])
i usunięte duplikaty (elementów w pierwszej kolumnie)
df1<- df1[unique(df1$V1),]
Potem stworzył nowy zestaw danych z:
newdata<-data.frame(V1common=df1[,1], V2df1=df1[,2],V2df2=df2[,2]...)
... znaczy dla wszystkich pięciu zestawów danych. Faktycznie uzyskałem taką samą liczbę wierszy (dobry znak, ponieważ liczba przecinków jest taka sama), a następnie dołączono inne posortowane kolumny, ale coś nie sumuje się. Dzięki za jakąkolwiek radę. (Pominąłem użycie bibliotek i tym podobne, kod służy jedynie celom ilustracyjnym).
Zobacz '? Merge'. Myślę, że 'merge (df1, df2)' będzie tym, czego szukasz. – nicola
Ogólnie rzecz biorąc, dobra praktyka, aby wspomnieć o bibliotekach, tak myślę. Tak jak osoby R mogą nie znać na przykład "filtru" (poza funkcją szeregu czasowego w bazie R). – Frank
Rozwijanie idei nicolas, dla wielu zestawów danych, użyj 'Reduce' z' merge', tj. 'Reduce (function (...) merge (..., by = 'V1'), mget (paste0 ('df', 1 : 5))) ' – akrun