【问题标题】:Create new variable that is linear combination of many other variables创建新变量,它是许多其他变量的线性组合
【发布时间】: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) 中抽取的随机数。

这样做的最佳方法是什么?我可以用mutatedplyr 做吗?

【问题讨论】:

    标签: r dplyr


    【解决方案1】:

    你可以试试

     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
    • @Frank 谢谢,在这种情况下sweep 输出是一个data.frame,但我猜lapply 对于大数据集来说会很快。
    猜你喜欢
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多