我有一个预定义的矩阵M = matrix(0,5,4)
。我想根据条件df
(矩阵行元素)和df$colA = x
(矩阵列元素)将数据帧df$colB = y
对象的值从零值更新为正确值。我已使用相应的唯一colA和colB值设置行名称和列名称。 ColA和ColB值是离散整数,而不是采用常规序列值。
M =矩阵(0,5,4) rownames(M)= C(135,138,145,146,151) colnames(M)= C(192204206207)
192 204 206 207
135 0 0 0 0
138 0 0 0 0
145 0 0 0 0
146 0 0 0 0
151 0 0 0 0
df-> ColA ColB ColC
135 192 1
135 204 1
135 206 -1
138 192 -1
138 206 1
138 207 1
145 192 -1
145 204 -1
145 206 -1
145 207 1
146 206 1
146 207 1
151 192 -1
151 207 1
for (r in rownames(M)) {
for (c in colnames(M)) {
tmp = df[(df$colA == c & df$colB==r),]$colC
if (!(length(tmp) == 0)) {
M[(rownames(M) == r),(colnames(M) == c)]= tmp
}
}
}
不是使用for循环,而是想知道是否可以使用apply或outer函数实现这一点,并且使用自定义函数处理matric更新部分。请帮助如何实现这一目标。
我试图引用此链接,但没有运气。
答案 0 :(得分:-1)
要修改矩阵,您可以使用apply()
功能。代码将是:
apply(M,1,function(x) <your_function>) # If you want to run for each row
apply(M,2,function(x) <your function>) # If you want to run for each column
如果您编写所需功能或简短示例,我们将为您提供更好的帮助。