2017-03-08 7 views
0

Ich habe Zeilen in meinem Datensatz teilweise dupliziert. Diese Zeilen stimmen mit zwei Variablen überein und haben dann für den Rest der Variablen einige NAs. Wenn ich diese Paare von teilweise duplizierten Zeilen kombinieren kann, würde ich einen vollständigen Fall für diese Zeile haben.Reduzieren doppelte Zeilen in R von zwei Variablen

Wie kann ich Zeilen in meinem Datensatz basierend auf ähnlichen Werten für zwei Variablen kombinieren, wodurch die NAs in jeder einzelnen Zeile ersetzt werden und eine vollständige Zeile übrig bleibt?

a <- (c(1, 1, 1, 1)) 
b <- (c(1, 1, 3, 3)) 
c <- (c(NA, 0, NA, NA)) 
d <- (c(0, NA, 0, NA)) 

y <- data.frame(a, b, c, d) 
head(y) 

a1 <- (c(1, 1)) 
b1 <- (c(1, 3)) 
c1 <- (c(0, NA)) 
d1 <- (c(0, 0)) 

z <- data.frame(a1, b1, c1, d1) 
head(z) 
+2

Können Sie einige Beispieldaten angeben, um Ihr Problem (und idealerweise die erwartete Ausgabe) zu veranschaulichen? – SymbolixAU

+0

Sind die beiden Variablen immer gleich? Wenn dies der Fall ist, sollte 'your_data%>% group_by (match1, match2)%>% summarize_all (koaleszieren)' es tun. – Gregor

+0

Ich habe versucht, etwas Code hinzuzufügen. Grundsätzlich möchte ich y wie z aussehen lassen. @SymbolixAU – DataCruncher124

Antwort

0

Wir können data.table verwenden. Umrechnen 'data.frame' to 'data.table' (setDT(y)), gruppiert nach 'a', 'b', loop throughthe Subset von Data.table (.SD) erhalten und die nicht-NA Elemente

library(data.table) 
setDT(y)[, lapply(.SD, function(x) x[!is.na(x)]) , .(a,b)] 
# a b c d 
#1: 1 1 0 0 
#2: 1 3 NA 0 
+2

Das OP hat das 'dplyr' -Tag gesetzt, also sucht er wahrscheinlich nach einer 'dplyr'-Antwort. – Uwe

+0

@UweBlock Ja, das könnte stimmen. Aber Antworten können auch von anderen gelesen werden. – akrun

Verwandte Themen