[英]Replace values in row of a data.frame by values of corresponding row a vector
我想要替换一行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
有没有办法在不使用循环的情况下做到这一点? 谢谢
您需要一些高级子集:
df1[a] <- df2[row(a)[a]]
输出:
> df1
V1 V2 V3 V4
1 5 8 9 5
2 4 6 6 6
3 6 9 6 8
此解决方案适用于数据框架或矩阵。
我们用'a'或'df1'的row
复制'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
(带编辑)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.