77 Stimmen

Ungleiche Datenrahmen zusammenführen und fehlende Zeilen durch 0 ersetzen

Ich habe zwei data.frames, eines mit nur Zeichen und das andere mit Zeichen und Werten.

df1 = data.frame(x=c('a', 'b', 'c', 'd', 'e'))
df2 = data.frame(x=c('a', 'b', 'c'),y = c(0,1,0))
merge(df1, df2)
  x y
1 a 0
2 b 1
3 c 0 

Ich möchte df1 und df2 zusammenführen. Die Zeichen a, b und c wurden gut zusammengeführt und haben auch 0, 1, 0, aber d und e haben nichts. Ich möchte d und e auch in der Zusammenführungstabelle haben, mit der 0 0 Bedingung. Also für jede fehlende Zeile im df2 data.frame, muss die 0 in die df1 Tabelle gesetzt werden, wie:

  x y
1 a 0
2 b 1
3 c 0
4 d 0
5 e 0

0voto

Captain Tyler Punkte 477

Hier wird ein data.table Antwort. Dies kann in ausgewählten Spalten verwendet werden, die die cols_added_df2 Die Definition von

df1 = data.frame(x=c('a', 'b', 'c', 'd', 'e'))
df2 = data.frame(x=c('a', 'b', 'c'),y = c(0,1,0))
setDT(df1)
setDT(df2)
df3 <- merge(df1, df2, by = "x", all.x = TRUE)

cols_added_df2 <- setdiff(names(df2), names(df1)) 
df3[, 
  paste0(cols_added_df2) := lapply(.SD, function(col){
    fifelse(is.na(col), 1, col)
  }),
  .SDcols = cols_added_df2
]

0voto

moodymudskipper Punkte 42381

Mit {powerjoin} können wir das tun:

df1 = data.frame(x=c('a', 'b', 'c', 'd', 'e'))
df2 = data.frame(x=c('a', 'b', 'c'),y = c(0,1,0))
powerjoin::power_full_join(df1, df2, fill = 0)
#> Joining, by = "x"
#>   x y
#> 1 a 0
#> 2 b 1
#> 3 c 0
#> 4 d 0
#> 5 e 0

Erstellt am 2022-04-28 von der Reprex-Paket (v2.0.1)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X