微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

优化矩阵/数据框的创建

如何解决优化矩阵/数据框的创建

我正在尝试使用与旧数据框中列的值匹配的值列表创建新矩阵/数据框。同样对于新的矩阵/数据框,我想保留用于匹配的值列表中的顺序。这是我想要实现的示例:

#A list of values used for matching
time.new <- c(2,3,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))

我通过使用 mergeorder 得到了解决方案(见下文),但我想避免使用 mergeorder,因为它们确实会减慢速度,而且我有更大的数据集。矩阵结果是首选,因为数据帧也可能很慢(用于进一步操作)所以任何想法将不胜感激!

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

解决方法

我们可以用match连接time.newtime.old,得到对应的 y 值。

set.seed(123)
time.new <- c(2,3,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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。