创建新变量,它是许多其他变量的线性组合。

3
假设我有一个数据框,其外观如下:
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)中抽取的随机数。
最好的方法是什么?我可以使用mutatedplyr吗?
1个回答

3

你可以尝试

 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)

 

1
sweep也可以强制转换为matrix,我猜。当我问了几乎相同的问题时,eddi建议使用Reduce(\+`,lapply(seq_along(v1),function(i)df1[[i]]*v1[i]))`:https://dev59.com/FHfZa4cB1Zd3GeqPV8vl#19279500 - Frank
@Frank 谢谢,这种情况下sweep的输出是一个数据框,但我猜对于大型数据集来说,lapply会更快。 - akrun

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接