我想用向量的相应行的值替换一行 data.frame 的每个值,因为具有相等大小的逻辑矩阵的值为 TRUE。下面是一个例子:
> df1
[,1] [,2] [,3] [,4]
[1,] 2 8 9 4
[2,] 2 6 6 6
[3,] 4 9 4 8
> a
[,1] [,2] [,3] [,4]
[1,] TRUE FALSE FALSE TRUE
[2,] TRUE FALSE FALSE FALSE
[3,] TRUE FALSE TRUE FALSE
> df2
[1] 5 4 6
所以结果应该是这样的:
> df1
[,1] [,2] [,3] [,4]
[1,] 5 8 9 5
[2,] 4 6 6 6
[3,] 6 9 6 8
有没有办法在不使用循环的情况下做到这一点?谢谢
我们通过row
'a' 或 'df1'复制 'df2' ,基于 'a' 的逻辑矩阵,我们改变值
ifelse(a, df2[row(a)], df1)
# [,1] [,2] [,3] [,4]
#[1,] 5 8 9 5
#[2,] 4 6 6 6
#[3,] 6 9 6 8
如果是data.frame
,那么我们只需要更改as.matrix(df1
) 并且它应该适用于两种情况
df1[] <- ifelse(a, df2[row(a)], as.matrix(df1))
或者另一种选择是
(df1*!a) + (df2[row(a)]*a)
# [,1] [,2] [,3] [,4]
#[1,] 5 8 9 5
#[2,] 4 6 6 6
#[3,] 6 9 6 8
注意:输出matrix
如预期输出中所示,OP 示例中的初始数据集为matrix
. 但它适用于data.frame
和matrix
(通过编辑)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句