【问题标题】:Replace matrix values based on vector with matching names in R用 R 中的匹配名称替换基于向量的矩阵值
【发布时间】:2019-11-30 18:43:09
【问题描述】:

我在 R 中有一个数据框,其中包含三个变量(a、b 和 c)的二进制条目

set.seed(12)
library(dplyr)
df <- data.frame(a = rbinom(10, 1, 0.5), b = rbinom(10, 2, 0.3), c = rbinom(10, 1, 0.8))

df
a b c
1  0 1 1
2  1 1 0
3  0 0 1
4  1 1 1
5  0 0 1
6  1 1 1
7  1 0 1
8  0 0 1
9  0 1 1
10 1 0 1

我还有一个数值向量,其名称与 df 中的列相同:

vec <- rnorm(3, 1, 0.5)
names(vec) <- colnames(df)
vec

       a         b         c 
1.3369906 2.0360179 0.7294857

事情是这样的:对于 df 中的每一列和每个观察值,如果变量的值为 1,则将 1 替换为 vec 中的值。否则,如果原始值为0,那么我想保留它。我试图执行一个循环,但效果不佳。

for(i in 1:ncol(df)){

  df[,i][df==1] <- vec[i]

} 

我觉得这可能是由于需要指定矩阵和向量之间的匹配模式。有没有其他方法可以做到这一点?

【问题讨论】:

  • df * vec[col(df)] 应该可以工作

标签: r matrix vector replace


【解决方案1】:

如果你想使用循环,以下应该可以解决问题。

for(i in 1:ncol(df)){
  for(j in 1:nrow(df)){
    if(df[j,i]>=1){df[j,i]<-vec[colnames(df[i])]}
    else{df[j,i]<-df[j,i]}
  }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-10
    • 2017-08-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多