我正在try 进行矢量化,避免For循环. 我有两个向量和一个矩阵.此外,我还有一个结果data.Frame,在其中我 for each ID保存了向量的相应值.此外,我希望获得每个ID的矩阵的相应值,即matrix[vector1[ID],vector2[ID]].然而,我想以一种矢量化的形式来做这件事.

我的数据:

vector1 <- sample(1:5, 10, 1)
vector2 <- sample(1:3,10,1)
df <- data.frame(v1=sample(1:10,5,1),
                 v2=sample(1:10,5,1),
                 v3=sample(1:10,5,1))

results <- data.frame(ID=1:10,
                      vector1,
                      vector2
                      )

对于每个ID,我想要df[vector1[1],vector2[1]]个,但以矢量化的形式,这样我可以直接将其保存在结果中.

我try 了以下几种方法:results$new=df[vector1,vector2],但没有得到我想要的结果.我想要这样的东西:

ID  vector1   vector2     new
 1        2         3       4 

其中,列NEW的计算方式为df[vector1[1],vector2[1]]

ID  vector1   vector2     new
 1        2         3       4 
 2        3         6       2
 3        1         1       1      

有办法做到这一点吗?

推荐答案

这是一个鲜为人知的特性,但R允许您使用特殊语法对矩阵进行索引-索引对象可以是两列的矩阵,其中第一列指定选定的行,第二列指定列.在您的 case 中:

results$new <- df[cbind(results$vector1, results$vector2)]

你可以在help("[")阅读更多关于它的内容,相关部分在这里:

当使用‘[’为数组编制索引时,单个参数‘i’可以是一个列数与‘x’的维度一样多的矩阵;结果是一个向量,其元素对应于‘i’的每一行中的索引集.

R相关问答推荐

按块将载体转换为矩阵-reshape

在R中列表的结尾添加数字载体

在R底座中更改白天和夜晚的背景 colored颜色

使用R中的Shapetime裁剪格栅文件

根据模式将一列拆分为多列,并在R中进行拆分

如何通过Docker部署我的shiny 应用程序(多个文件)

R Sapply函数产生的值似乎与for循环方法略有不同

如何将R中数据帧中的任何Nas替换为最后4个值

`lazy_dt`不支持`dplyr/across`?

在不丢失空值的情况下取消列出嵌套列表

将一个字符串向量调整为与其他字符串向量完全相同的大小

有没有办法使用ggText,<;Sub>;&;<;sup>;将上标和下标添加到同一元素?

R-按最接近午夜的时间进行筛选

如何将使用rhandsontable呈现的表值格式化为百分比,同时保留并显示完整的小数精度?

我们如何在R中透视数据并在之后添加计算

提高圣彼得堡模拟的速度

根据r中另一个文本列中给定的范围对各列求和

R仅当存在列时才发生变异

有毒元素与表观遗传年龄的回归模型

注释不会绘制在所有ggplot2面上