【发布时间】:2015-06-05 18:24:09
【问题描述】:
假设我有一个如下所示的数据框:
df1 <- as.data.frame(matrix( rnorm(100*50,mean=0,sd=1), 100, 50))
我想创建一个新变量 y,它是 alpha_i*V_i 的总和,其中 i 从 1 到 50,其中 alpha 是从均匀分布 (0,1) 中抽取的随机数。
这样做的最佳方法是什么?我可以用mutate 和dplyr 做吗?
【问题讨论】:
假设我有一个如下所示的数据框:
df1 <- as.data.frame(matrix( rnorm(100*50,mean=0,sd=1), 100, 50))
我想创建一个新变量 y,它是 alpha_i*V_i 的总和,其中 i 从 1 到 50,其中 alpha 是从均匀分布 (0,1) 中抽取的随机数。
这样做的最佳方法是什么?我可以用mutate 和dplyr 做吗?
【问题讨论】:
你可以试试
df1$newvar <- as.matrix(df1) %*% v1
或者
df1$newvar <- rowSums(sweep(df1, 2, v1, FUN='*'))
或者按照@Frank 基于post 的建议
df1$newvar <- Reduce(`+`,lapply(seq_along(v1),function(i)df1[[i]]*v1[i]))
set.seed(24)
df1 <- as.data.frame(matrix( rnorm(100*50,mean=0,sd=1), 100, 50))
set.seed(48)
v1 <- runif(50)
【讨论】:
sweep 也强制转换为matrix,我猜。当我问几乎相同的问题时,eddi 建议Reduce(`+`,lapply(seq_along(v1),function(i)df1[[i]]*v1[i])):stackoverflow.com/a/19279500/1191259
sweep 输出是一个data.frame,但我猜lapply 对于大数据集来说会很快。