Mam dwie ramki danych:

df1
Syllable Duration Pitch
@         0.08    93
@         0.05    107
@         0.13    56
@         0.07    95
@         0.07    123

df2
Syllable Duration 
@        0.08 
@        0.05 
@        0.07
@        0.07 

Chcę połączyć je w inną ramę danych:

df3
Syllable Duration Pitch
@        0.08     93
@        0.05     107
@        0.07     95
@        0.07     123

Problem polega na tym, że mam powtarzające się wartości sylaby i czas trwania. Próbowałem tego kodu, ale daje mi niepoprawną skok:

df3 <- merge(df2, df1[!duplicated(df1$Syllable),], by="Syllable")

df3
Syllable Duration Pitch
@        0.08     93
@        0.05     93
@        0.07     93
@        0.07     93
r
2
user9895243 5 czerwiec 2018, 14:23

2 odpowiedzi

Najlepsza odpowiedź

Proponowałbym przy użyciu pakietu DPLERA. Jeśli go użyjesz, możesz wybrać kolumny, które chcesz dołączyć. Po dołączeniu należy użyć semi_join zamiast inner_join. Różnica polega na tym, że inner_join utrzymuje wszystkie kombinacje i ewentualnie duplikaty wiersze ("Jeśli istnieje wiele meczów między X a Y, zwracana jest każda kombinacja meczów.")

Z drugiej strony {{x0}

W przypadku Twojej sprawy można użyć semi_join(df1, df2, by = c("Syllable", "Duration")), aby scalić Dataframes. Wektor by definiuje nazwy kolumn, do których chcesz dołączyć.

Daje to, czego chciałeś:

  Syllable Duration Pitch
1        @     0.08    93 
2        @     0.05   107
3        @     0.07    95
4        @     0.07   123
1
Cactus 5 czerwiec 2018, 11:51
#now keeps unique values for Syllable and the Pitch Values

df1 <- df1[order(df1$Syllable),]

df4<-merge(df2,df1)

df5<-df4[!duplicated(df4$Syllable),]
1
Marta 5 czerwiec 2018, 12:27