如何使用数组中包含的值替换特定列号

时间:2017-11-13 13:46:15

标签: r

我有一个矩阵' pnl12'(x行,y列)和两个向量:' ttd'并且' ttm'。

no. of columns in 'pnl12' = length of ttd = length of ttm

现在我希望选择pnl12的某些列为:

pnl12[,(ttm < 1) & (ttd < 1) & (ttd<ttm) ]

或者我也可以将pnl12列替换为:

which((ttm < 1) & (ttd < 1) & (ttd<ttm))

让我们说,选择满足上述条件的3列为第796,799和904列。

现在我希望用向量b

中的值替换这些列的所有值
b = c(19, 26, 43)

因此,pnl12的第796列中的所有值都将被替换为19.第799列中的所有值将被替换为26.并且第904列中的所有值将替换为43。

此向量b生成为:

b = ead[(ttm < 1) & (ttd < 1) & (ttd<ttm)]*(1-rr[(ttm < 1) & (ttd < 1) & (ttd<ttm)]))

所以,&#39; b&#39;与pnl12中选择的列数相同。

有人可以帮我解决上面的替换问题吗?

例如,我有一个矩阵:

1 2 3  
4 5 6
7 8 9 

然后第2列和第3列将由40和50替换,因此结果将是:

1 40 50 
4 40 50
7 40 50 

如何在R?

中实现这一目标

由于

1 个答案:

答案 0 :(得分:0)

我会将您的替换扩展到正确的尺寸:

# setting up one of your examples
mm = matrix(1:9, 3)
b = c(2, 3)
x = c(40, 50)

# expand the replacement appropriately, then assign
xx = matrix(x, nrow = nrow(mm), ncol = length(x), byrow = TRUE)
mm[, b] = xx
mm
#      [,1] [,2] [,3]
# [1,]    1   40   50
# [2,]    2   40   50
# [3,]    3   40   50

或者,简单的for循环没有错:

for (i in seq_along(b)) {
    mm[, i] = x[i]
}