2010-12-06 1 views
0

В приведенном ниже примере у меня есть две строки, где совпадают First, Last и Address 1/2. Два разных адреса электронной почты, но с одним дополнительным настраиваемым полем. То, что я хотел бы сделать, - это систематически выбирать первую строку, когда она представлена ​​несколькими строками, которая выглядит так.Выбор строки на основе совпадений и NA в другом поле

Lines <- " 
First, Last, Address, Address 2, Email, Custom1, Custom2, Custom3 
A, B, C, D, [email protected],1,2,3 
A, B, C, D, [email protected],1,2, 
" 
con <- textConnection(Lines) 

В словах:

IF Первый & Последний & Адрес 1 & Адрес 2 матча, выбрать то, что один, где Другое3 не NA.

Как я могу применить это к большому набору данных?

Примечание: скорость здесь не важна, пример с plyr был бы наиболее полезен.

ответ

1

Вот plyr решение:

con <- textConnection(Lines <- " 
First, Last, Address, Address 2, Email, Custom1, Custom2, Custom3 
A, B, C, D, [email protected],1,2,3 
A, B, C, D, [email protected],1,2, 
") 
x <- read.csv(con) 
close(con) 

ddply(x, .(First, Last, Address, Address.2), function(x2) x2[!is.na(x2$Custom3), c("Email", "Custom1", "Custom2", "Custom3")]) 
4

Вот некоторые примеры не-plyr, потому что я не могу быть полезным. ;-)

x <- read.csv(con) 
close(con) 

# Using split-apply-combine 
do.call(rbind, lapply(split(x, x[,1:4]), function(X) X[!is.na(X$Custom3),])) 

# Using ave 
x[!ave(x$Custom3, x[,1:4], FUN=is.na),] 
+1

Non-plyr пример? Ты свихнулся? – Shane 2010-12-06 20:16:46

Смежные вопросы