У меня есть data.frame v
, что я хотел бы использовать уникальные строки изИспользуйте уникальные строки из data.frame подмножеству другого data.frame
#v
DAY MONTH YEAR
1 1 1 2000
2 1 1 2000
3 2 2 2000
4 2 2 2000
5 2 3 2001
подмножеству в data.frame w
.
# w
DAY MONTH YEAR V1 V2 V3
1 1 1 2000 1 2 3
2 1 1 2000 3 2 1
3 2 2 2000 2 3 1
4 2 2 2001 1 2 3
5 3 4 2001 3 2 1
В результате data.frame vw
. Там, где остались только строки в 'w', которые соответствуют уникальным строкам (например, (DAY, MONTH, YEAR)
) в v
.
# vw
DAY MONTH YEAR V1 V2 V3
1 1 1 2000 1 2 3
2 2 2 2000 2 3 1
Прямо сейчас я использую следующий код, где я слить data.frames
, а затем использовать ddply
выбрать только первый/уникальное мировоззрение экземпляр строки. Эта работа, но станет громоздкой, если я должен включить V1=x$V1[1]
и т. Д. Для всех моих переменных в части кода ddply
. Есть ли способ использовать первый экземпляр (DAY, MONTH, YEAR)
и остальные столбцы в этой строке?
Или, есть ли другой подход к проблеме использования уникальных строк от одного data.frame
до подмножества другого data.frame
?
v <- structure(list(DAY = c(1L, 1L, 2L, 2L, 2L), MONTH = c(1L, 1L,
2L, 2L, 3L), YEAR = c(2000L, 2000L, 2000L, 2000L, 2001L)), .Names = c("DAY",
"MONTH", "YEAR"), class = "data.frame", row.names = c(NA, -5L
))
w <- structure(list(DAY = c(1L, 1L, 2L, 2L, 3L), MONTH = c(1L, 1L,
2L, 2L, 4L), YEAR = c(2000L, 2000L, 2000L, 2001L, 2001L), V1 = c(1L,
3L, 2L, 1L, 3L), V2 = c(2L, 2L, 3L, 2L, 2L), V3 = c(3L, 1L, 1L,
3L, 1L)), .Names = c("DAY", "MONTH", "YEAR", "V1", "V2", "V3"
), class = "data.frame", row.names = c(NA, -5L))
vw_example <- structure(list(DAY = 1:2, MONTH = 1:2, YEAR = c(2000L, 2000L),
V1 = 1:2, V2 = 2:3, V3 = c(3L, 1L)), .Names = c("DAY", "MONTH",
"YEAR", "V1", "V2", "V3"), class = "data.frame", row.names = c(NA,
-2L))
wv_inter <- merge(v, w, by=c("DAY","MONTH","YEAR"))
vw <- ddply(www,.(DAY, MONTH, YEAR),function(x) data.frame(DAY=x$DAY[1],MONTH=x$MONTH[1],YEAR=x$YEAR[1], V1=x$V1[1], V2=x$V2[1], V3=x$V3[1]))
'+ 1' за чистый ответ, но' ddply' далеко от 'base R' –
@RicardoSaporta Согласен; «base R» предназначалось для изменения только первой строки, состоящей из 'unique' и' merge'. Следующая строка 'ddply' - попытка упростить последнюю строку кода OP в исходном подходе OP. –
Этот подход работает. Просто удалите финальную ')' во второй команде. Выполняет ли 'function (x) x [1,]' как первую уникальную строку x? – nofunsally