r - 用于查找每场比赛总和的矢量化替代方案

标签 r loops vectorization

有人可以建议以下代码的矢量化替代方案吗:

x=read.table("1.txt")
y=read.table("unique.txt")
nrowx=nrow(x)
nrowy=nrow(y)
for(i in 1:nrowy)
    {
        y[i,3]=0
        for(j in i:nrowx)            
        {
            if((y[i,1]==x[j,1])&(y[i,2]==x[j,2]))
            {
                y[i,3] = (y[i,3] + x[j,3])
            }
        }
    }

文件 y 包含 x 的唯一元素(考虑第 1 2 列)。对于 y 中的每个条目,在 x 中找到所有可能的匹配,并且 x 的第 3 列中的相应值的总和存储在 y 的第 3 列中。这是针对 y 的每一行完成的。

在 x 中读取了几行文件:

"X1" "X2" "X3"
"1" 4 10 -1440
"2" 4 10 -3765
"3" 10 22 523
"4" 10 295 730
"5" 10 295 1599
"6" 10 584 1872
"7" 10 403 1872
"8" 10 403 1872
"9" 10 281 554
"10" 10 123 554

y 中读取了几行文件:

"X1" "X2" "X3" 
"1" 4 10 NA 
"3" 10 22 NA 
"4" 10 295 NA 
"6" 10 584 NA 
"7" 10 403 NA 
"9" 10 281 NA 
"10" 10 123 NA 

预期输出:

X1  X2    X3
1  4  10 -5205
2 10  22   523
3 10 123   554
4 10 281   554
5 10 295  2329
6 10 403  3744
7 10 584  1872

文件非常大,这些循环需要很长时间。欢迎一些不涉及循环的替代方案。 谢谢!

最佳答案

看来aggregate函数在这里很有用:

aggregate(x, list(x$X1, x$X2), sum) -> a
data.frame(X1=a$Group.1, X2=a$Group.2, X3=a$X3)
  X1  X2    X3
1  4  10 -5205
2 10  22   523
3 10 123   554
4 10 281   554
5 10 295  2329
6 10 403  3744
7 10 584  1872

这样更快吗?让我知道。

关于r - 用于查找每场比赛总和的矢量化替代方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19287790/

相关文章:

python - 矢量化misc.imresize()时出现广播错误

python - 如何向量化具有不同形状的 ndarray 作为参数的函数?

将 NA 替换为 R 中的上一行和下一行平均值

r - R Commander 中分组数据的 T 检验

r - 分类/二进制数据总和的直方图

r - 对 4 个因素的组合迭代 3 向交互 ggplot 调用

c - strchr 在 C 中不工作

多个值的 Javascript 索引

javascript - 我怎样才能在javascript中循环这个模式?

Python 从一组值中屏蔽图像像素