如何合并和维护一个输入的行顺序?

时间:2012-06-21 18:32:56

标签: r sorting merge dataframe

我有一个数据框,它将瓶号与其卷相关联(下例中为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)
  }

2 个答案:

答案 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")