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

标签 r sorting merge dataframe

这个问题在这里已经有了答案:





Merge two data frames while keeping the original row order

(12 个回答)


3年前关闭。




我有一个数据框,它将瓶子编号与其体积相关联(在下面的示例中为 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)
  }

最佳答案

你可以用 match 来做到这一点和子集 key结果:

bottles <- key[match(samp, key$num),]
# rownames are odd because they must be unique, clean them up
rownames(bottles) <- seq(NROW(bottles))

关于r - 如何合并和维护一个输入的行顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11144551/

相关文章:

r - 如果一列的值出现在另一列中,则对行进行分组

r - 使用 dplyr 按组计算加权平均值(并复制其他方法)

java - 无法弄清楚如何按这些条件对列表进行排序

python - pandas:合并帮助两个数据框

svn - Subversion 能否正确处理两个方向的合并(主干 <-> 分支)?

join - 矩阵的 Octave 条件合并

r - 在 R 中使用 fft 从特征函数计算密度

r - ggplot_stat_密度2d 生态分布图

php - 使用模数排序

r - 按出现频率对数据框列进行排序