【发布时间】: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)]应该可以工作