gpt4 book ai didi

r - 在 R 中对数据帧进行矢量化循环

转载 作者:行者123 更新时间:2023-12-04 18:45:48 27 4
gpt4 key购买 nike

我有一个包含三列的数据框:引用、目标、距离。每个引用都有一个到同一组目标的测量距离,我想获得每个引用的最小距离向量。现在我正在使用 for 循环执行此操作,但似乎应该有一种方法可以将其矢量化。

这是我的代码:

refs <- levels(data$ref)

result <- c()
for (ref in refs) {
# Find the minimum distance for observations with the current ref
# but be sure to protect against ref == target!
best_dist <- min(data[data$ref == ref & data$target != ref,]$distance)
result <- c(result, best_dist)
}

我注定要以这种方式设置我的数据框,还是有一种很好的方法可以将其矢量化?谢谢您的帮助!

最佳答案

永远不要使用 c 在循环中增长对象, cbind , rbind .每次都会复制对象。
而是预先分配到正确的大小(如果结果是流动的,则高估一些)。

话虽如此,这里不需要循环

我喜欢 data.table s 用于内存效率和编码优雅。

 library(data.table)
DT <- data.table(data)


DT[ref != target, list(bestdist = min(distance)), by = ref]

如果 ref 和 target 是具有不同级别的因子列(如评论中所建议),则要么使它们具有相同的级别,要么转换为字符
 DT[as.character(ref) != as.character(target),  list(bestdist = min(distance)), by = ref] 

关于r - 在 R 中对数据帧进行矢量化循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14763789/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com