繁体   English   中英

将data.frame的行中的值替换为相应的行a向量的值

[英]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.framematrix (带编辑)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM