Выбор строки на основе совпадений и NA в другом поле - PullRequest
0 голосов
/ 06 декабря 2010

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

Lines <- "
First, Last, Address, Address 2, Email, Custom1, Custom2, Custom3
A, B, C, D, E@E.com,1,2,3
A, B, C, D, F@G.com,1,2,
"
con <- textConnection(Lines)

В словах:

ЕСЛИ первый и последний и адрес 1 и адрес 2 совпадают, выберите тот, где custom3 не является NA.

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

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

Ответы [ 2 ]

4 голосов
/ 06 декабря 2010

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

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 голос
/ 06 декабря 2010

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

con <- textConnection(Lines <- "
First, Last, Address, Address 2, Email, Custom1, Custom2, Custom3
A, B, C, D, E@E.com,1,2,3
A, B, C, D, F@G.com,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")])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...