替换矩阵(R)中的值的有效方法

阿尔布伦

我有一个大矩阵(m),我想用新值(new_values)替换与向量(values_to_be_replaced)中存储的值匹配的矩阵(m)中的值。我的向量本身存储在数据帧中,因此我可以在数据帧上循环以获取向量,然后检查向量中是否包含矩阵值。下面的代码完成了应做的事情,但是对于我的输入数据来说太慢了。我的原始数据是一个有4600行和5900列的矩阵,而我的750个向量中最大的一个包含要比较的600万个数字。

我猜想有一种更有效的方法来加快计算速度。有人可以帮我弄清楚吗?(我的矩阵中有很多-9999值,因此跳过它们可以缩短计算时间,但可能还不够)

这是用R编写的示例:

library("dplyr")
## setting up the input dataframe
df<-setNames(data.frame(matrix(ncol = 4, nrow = 50)), c("ids", "var1", "var2", "var3"))
df$ids<-seq(1, 50,1)
df$var1<-rep(c(2, 4, 2, 1, 3, 5,1, 1,1, 6), each = 5)
df$var2<-rep(c(2, 4, 2, 1, 3, 5,1, 1,1, 6), each = 5)
df$var3<-rep(c(2, 4, 2, 1, 3, 5,1, 1,1, 6), each = 5)

##summarizing it by variables and ids
df<-df%>%
  group_by(var1, var2, var3)%>%
  summarise(ids=toString(ids))%>%data.frame()

##giving a new value by which values in matrix should be replaced
df$new_values<-c("101", "102", "103", "104", "105", "106")

##setting up a matrix
m = matrix( c(16, -9999,17, -9999, 18), nrow=5,  ncol=10, byrow = TRUE)        # fill matrix by rows 

##looping over dataframe
y<-0
for (i in 1:length(df$ids)) {
  values_to_be_replaced<-strsplit(df$ids[i], ",")
  values_to_be_replaced<-unlist(values_to_be_replaced, use.names=FALSE)
  values_to_be_replaced<-gsub(" ", "", values_to_be_replaced, fixed = TRUE)
  print(values_to_be_replaced)
  print(i)
  #print(length(values_to_be_replaced))
  m<-apply(m, 1:2, function(x) ifelse(x %in% values_to_be_replaced, df$new_values[i], x))
  #print(values_to_be_replaced)
  y<-y+1
}
笨狼

在R中,您可以仅调用匹配的元素,而无需遍历它们:

for (i in 1:length(df$ids)) {
  values_to_be_replaced<-strsplit(gsub(" ","",df$ids[i]), ",")[[1]]
  values_to_be_replaced<-as.numeric(values_to_be_replaced)
  m[m %in% values_to_be_replaced] <- df$new_values[i]
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

通过字典有效替换熊猫系列中的值

使用字符串列表R替换所有列值的有效方法

在scipy.sparse矩阵中访问行/列中非零值的最有效方法

替换熊猫数据框中每个单元格值的有效方法

R中var-covar矩阵的有效计算

有效地比较R中的矩阵

获得矩阵中重复次数最多的值的有效方法

R中根据bin值的第二向量替换值向量的有效方法

在Python中填充稀疏矩阵的有效方法

用从对象中提取的内容替换数据框中的值的有效方法?

在Python中求解矩阵方程的有效方法

使用Matrix的值作为行索引在R中另一个矩阵中查找值的最有效方法

如何使用R中的列表条目有效地设置矩阵的值?

一种获取矩阵中的正切索引或值的有效方法

用R中的相对频率有效替换数据框列的值

基于R?中某些值和索引矩阵的更有效的数据矩阵获取方法。

根据另一个矩阵中的值移动一个矩阵中的值的有效方法

将索引分配给矩阵中的True值的有效numpy方法

R中字符矩阵内的有效重复

R中矩阵的有效子集和列求和

根据字典替换尴尬数组中的值的有效方法?

在R中创建市场篮子矩阵的有效方法

Matlab:稀疏矩阵中的有效值分配

从R中的索引集中获取矩阵元素的有效方法是什么?

在矩阵中定位相邻元素的有效方法

(SQL)在DataGridView中替换NULL值的有效方法?

使用字典替换data.table中的值的最有效方法是什么?

在 R 或 Python 中随机化矩阵的最有效方法

以列-行对为键,以矩阵中的对应值为值创建对称矩阵字典的有效方法