7

我有一个将瓶号与其体积相关联的数据框(key在下面的示例中)。我想编写一个函数,它将获取任何瓶号列表 ( samp) 并返回瓶子体积列表,同时保持瓶号顺序samp

下面的函数正确匹配瓶号和体积,但按瓶号升序对输出进行排序。

我怎样才能保持sampwith的顺序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)
  }
4

2 回答 2

4

您可以使用结果进行此操作match并对其进行子集key化:

bottles <- key[match(samp, key$num),]
# rownames are odd because they must be unique, clean them up
rownames(bottles) <- seq(NROW(bottles))
于 2012-06-21T19:25:09.963 回答
3

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")
于 2012-10-03T12:51:40.520 回答