2017-03-08 75 views
0

我的數據集中有部分重複的行。這些行匹配兩個變量,然後對其餘變量匹配一些NAs。如果我可以合併這些部分重複的行對,那麼對於那一行我會有一個完整的案例。通過兩個變量摺疊R中的重複行

如何將基於兩個變量的相似值的數據集中的行組合起來,從而替換每個單獨行中的NAs,留下一個完整的行?

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

你能否提供一些示例數據來說明你的問題(最好是預期的產出)? – SymbolixAU

+0

這兩個變量總是一樣嗎?如果是這樣,'your_data%>%group_by(match1,match2)%>%summarize_all(coalesce)'應該這樣做。 – Gregor

+0

我試着添加一些代碼。基本上,我想讓y看起來像z。 @SymbolixAU – DataCruncher124

回答

0

我們可以使用data.table。轉換 'data.frame' 到 'data.table'(setDT(y))中,由 'A', 'B',環throughthe Data.table(.SD)的子集進行分組,並獲得非NA元件

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

OP已經設置了'dplyr'標籤,所以他可能正在尋找'dplyr'的答案。 – Uwe

+0

@UweBlock是的,那可能是對的。但是,答案也可以被其他人閱讀。 – akrun