我有一个数据框,它将瓶号与其卷相关联(下例中为key
)。我想编写一个功能,可以获取任何瓶号列表(samp
)并返回瓶容量列表,同时保持samp
中的瓶号顺序。
以下功能正确匹配瓶号和体积,但按瓶号上升对输出进行排序。
如何使用samp
维护merge
的顺序?设置sort=FALSE
会导致“未指定的顺序”。
示例
samp <- c(9, 1, 4, 1)
num <- 1:10
vol <- sample(50:100, 10)
key <- data.frame(num, vol)
matchFun <- function(samp, key)
{
out <- merge(as.data.frame(samp), key, by.x="samp", by.y="num")
return(out$vol)
}
答案 0 :(得分:3)
您可以使用match
执行此操作,并通过结果对key
进行子集化:
bottles <- key[match(samp, key$num),]
# rownames are odd because they must be unique, clean them up
rownames(bottles) <- seq(NROW(bottles))
答案 1 :(得分:2)
join
包中的 plyr
对此非常有用......
samp <- c(9, 1, 4, 1)
num <- 1:10
vol <- sample(50:100, 10)
key <- data.frame(num, vol)
samp<-as.data.frame(samp)
names(samp)<-"num"
library("plyr")
join(key,samp,type="right")