代码之家  ›  专栏  ›  技术社区  ›  cliu

优化矩阵/数据帧的创建

  •  0
  • cliu  · 技术社区  · 3 年前

    我正在尝试使用与旧数据框中某列的值匹配的值列表来创建新的矩阵/数据框。另外,对于新的矩阵/数据帧,我希望保留用于匹配的值列表中的顺序。下面是我想要实现的一个例子:

    #A list of values used for matching
    time.new <- c(2, 3, 4, 3, 4, 5, 4, 5, 6)
    #The old data frame which I would match on the column of time.old
    old <- data.frame(time.old=1:10, y=rnorm(10))
    

    我通过使用 merge order 但我想避免 合并 秩序 因为他们真的放慢了速度,我有一个更大的数据集。矩阵结果是首选的,因为数据帧也可以慢(为进一步的操作),所以任何想法将受到赞赏!

    time.new <- data.frame(id = 1:length(time.new), time=time.new)
    new_dataframe <- merge(x = time.new, y = old, by.x = "time", by.y="time.old", all.x = TRUE)
    new_dataframe <- new_dataframe[order(new_dataframe$id), ]
    new_dataframe$id <- NULL
    
    1 回复  |  直到 3 年前
        1
  •  1
  •   Ronak Shah    3 年前

    我们可以用 match 加入 time.new time.old 并得到相应的 y 价值观。

    set.seed(123)
    time.new <- c(2, 3, 4, 3, 4, 5, 4, 5, 6)
    old <- data.frame(time.old=1:10, y=rnorm(10))
    cbind(time = time.new, y = old$y[match(time.new, old$time.old)])
    
    #      time       y
    # [1,]    2 -0.2302
    # [2,]    3  1.5587
    # [3,]    4  0.0705
    # [4,]    3  1.5587
    # [5,]    4  0.0705
    # [6,]    5  0.1293
    # [7,]    4  0.0705
    # [8,]    5  0.1293
    # [9,]    6  1.7151