小编N.V*_*ela的帖子

R:更简单的方法将矩阵列表中的0更改为NA?

我想将列表矩阵中的所有0转换为NA.我想出了如何完成这项任务的方法.但是,它太复杂了,我认为应该有一个简单的方法来做到这一点.这里有一些示例数据:

ABlue <- list("111.2012"=matrix(c(1, 0, 6, 0, 1, 0),
                            nrow = 1, byrow = T),
          "112.2012"=matrix(c(6, 2, 2, 0, 3, 1),
                            nrow = 1, byrow = T),
          "111.2011"=matrix(c(3, 2, 0, 0, 1, 9),
                            nrow = 1, byrow = T),
          "112.2011"=matrix(c(1, 2, 0, 0, 7, 0),
                            nrow = 1, byrow = T))
CNTRYs <- c("USA", "GER", "UK", "IT", "CND", "FRA")
ABlue <- lapply(ABlue  , "colnames<-",  CNTRYs ) # gets names from Country list
Run Code Online (Sandbox Code Playgroud)

重要的是,原始矩阵已经将国家/地区名称作为名称,因此与此列表(ABlue)匹配会很不错.

这是我现在使用的方式:

ABlue.df<-data.frame(do.call("rbind",ABlue)) # two step approach to …
Run Code Online (Sandbox Code Playgroud)

r list na

9
推荐指数
1
解决办法
125
查看次数

如何根据名称向量聚合列表中的矩阵?

我想根据存储在向量中的名称在列表中聚合(求和)矩阵.这里有一些示例数据:

lst <- list("111"=matrix(c(1, 0, 6, NA, 1, 0),
                              nrow = 1, byrow = T),
            "112"=matrix(c(6, 2, 2, 0, 3, NA),
                              nrow = 1, byrow = T),
            "113"=matrix(c(2, 3, 0, 0, 1, 1),
                         nrow = 1, byrow = T))
agg.nam <- c(111,113)
Run Code Online (Sandbox Code Playgroud)

我的预期结果是:

> res
$
     [,1] [,2] [,3] [,4] [,5] [,6]
[1,]    3    3    6    0    2    1
Run Code Online (Sandbox Code Playgroud)

因此,第一个和第三个矩阵相加(na.rm = TRUE).

我首先尝试将agg.nam子集化:

lapply(lst, function(x) x[, which(names(x) %in% agg.nam)] )
Run Code Online (Sandbox Code Playgroud)

但是我在这一点上已经失败了,没有聚合.

aggregate r list

7
推荐指数
1
解决办法
444
查看次数

R:如何匹配/连接不同维度的2个矩阵(nrow/ncol)?

我想匹配/加入两个矩阵,一个小值的值应该通过rownames/colnames匹配更大的矩阵.我只找到了这个答案.但是,我无法匹配位置,因为代码行在frn <- as.matrix(bigMatrix[[1]])我的情况下不起作用.内,外...加入的答案,在这里并没有帮助,因为我想匹配/加入了很多不同的列(而不是如用于X CostumerID和y的一个客户ID).

因为我使用的矩阵是126x104和193x193矩阵.我准备了示例数据:1.较大的矩阵,其中应包括较小的矩阵(字母在原始数据集国家名称中):

a = c("A", "B", "C", "D", "E", "F")
full_matrix = matrix(nrow = length(a), ncol=length(a))
dimnames(full_matrix) <- list(levels(as.factor(a)), levels(as.factor(a)))

full_matrix
   A  B  C  D  E  F
A NA NA NA NA NA NA
B NA NA NA NA NA NA
C NA NA NA NA NA NA
D NA NA NA NA NA NA
E NA NA NA NA NA NA
F NA NA NA NA NA NA
Run Code Online (Sandbox Code Playgroud)

而较小的矩阵:

matrix …
Run Code Online (Sandbox Code Playgroud)

r

4
推荐指数
1
解决办法
954
查看次数

R:如何在两个列表上运行函数?

我想在两个列表上运行以下函数:

function(Z, p) {
  imp <- as.vector(cbind(imp=rowSums(Z)))
  exp <- as.vector(t(cbind(exp=colSums(Z))))
  x = p + imp
  ac = p + imp - exp  
  einsdurchx = 1/as.vector(x)    
  einsdurchx[is.infinite(einsdurchx)] <- 0
  A = Z %*% diag(einsdurchx)
  R = solve(diag(length(p))-A) %*% diag(p)
  C = ac * einsdurchx
  R_bar = diag(as.vector(C)) %*% R
  rR_bar = round(R_bar)
  return(rR_bar)
}
Run Code Online (Sandbox Code Playgroud)

在 amatrix和 a上工作正常vector。但是,我需要在 alist of matrices和 a上运行此函数list of vectors。我lapply/mapply按照这个例子到目前为止尝试过,见下文。这里有一些示例数据显示了我的数据结构:

Z <- list("111.2012"= matrix(c(0,0,100,200,0,0,0,0,50,350,0,50,50,200,200,0),
                             nrow = …
Run Code Online (Sandbox Code Playgroud)

r function list lapply

3
推荐指数
1
解决办法
540
查看次数

R:如何用向量乘以列表元素?

我想要乘以一个矩阵列表(有一行),如下所示:

lst <- list("111.2012"=matrix(c(1, 0, 6, NA, 1, 0),
                            nrow = 1, byrow = T),
          "112.2012"=matrix(c(6, 2, 2, 0, 3, NA),
                            nrow = 1, byrow = T))
Run Code Online (Sandbox Code Playgroud)

使用这样的矢量(与每个矩阵的长度相同):

vec <- c(1,2,3,1,2,3)
Run Code Online (Sandbox Code Playgroud)

并期待这个结果:

$`111.2012`
     [,1] [,2] [,3] [,4] [,5] [,6]
[1,]    1    0   18   NA    2    0

$`112.2012`
     [,1] [,2] [,3] [,4] [,5] [,6]
[1,]    6    4    6    0    6   NA
Run Code Online (Sandbox Code Playgroud)

我到目前为止尝试了这个:

mapply("*", lst, vec) 
Map("*", lst, vec)
Run Code Online (Sandbox Code Playgroud)

这给了我三倍的数字和错误的数字.我还想过在mapply中使用lapply来添加列表,但是不知道怎么做.有什么建议?谢谢

r list

2
推荐指数
1
解决办法
4385
查看次数

标签 统计

r ×5

list ×4

aggregate ×1

function ×1

lapply ×1

na ×1