【问题标题】:Loop in R: Store output in a dataframeR中的循环:将输出存储在数据框中
【发布时间】:2017-01-28 06:05:41
【问题描述】:

这是我目前面临的问题: 我有一个包含 96 个观察值(行)和 16 个变量(列)的数据框(我们称之为 A)。 我还有 16 个元素(A 的 16 个变量中每个变量的系数)的 9 个列向量(来自主成分分析)的旋转。

PCA 旋转保存如下:

ph=prcomp(home[ ,3:17], scale. = TRUE)
Home_vec=-round(ph$rotation[ ,1:9], 3)

现在,我已经能够将我的数据帧的其中一行乘以对象 Home_vec,输出等于将行乘以 9 个 PC 列中的每一列,然后应用 cbind。

例如行输入:

TEAM=c(5, 1503, 26.31, 16.2, 0.099, 33, 28, 368, 35, 15, 84, 942, 528, 33, 315)

我的新输出:

TEAM.1=round(TEAM*Home_vec,3)

我创建了一个 for 循环,它为我的数据框中的 96 个观察值中的每一个执行此过程。

F=function(x){
  x*Home_vec
} 

for(i in 1:96){
    print(F(home[i,2:17]))
}

唯一的问题是 - 我正在努力将输出(这是一个 96 x 9 的数据框)保存为一个新对象。

任何帮助将不胜感激, 谢谢!

【问题讨论】:

    标签: r for-loop pca


    【解决方案1】:

    尝试对您的循环执行以下操作:

    我正在使用包 dplyr。

    x <- "" %>% data.frame
    
    for(i in 1:96){
    y <- F(home[i,2:17]))
    x <- bind_rows(x,y)
    }
    
    x <- x %>% .[-1,-1]
    

    【讨论】:

    • Christiaan 非常感谢你,这对我有用。但是,当我用顶部的 x 代替底部的 x 时,它起作用了。如果您不介意我问, x % 到底是什么。 [-1,-1] 做吗?
    • 编辑:我意识到顶线是必要的,道歉。我需要重新排序代码:底线放在第二位。我仍然很好奇这两行是在指示计算机做什么。
    • 在顶部我创建了一个空数据框(1x1 数据框),然后在循环中将新行绑定到空数据框。最后一行只是删除了创建的空数据框的第一行和第一列。 (在没有最后一行的情况下运行循环,然后在运行最后一行之前查看 x 以查看会发生什么)
    • ps,如果解决方案有帮助,请给我投票,我可以通过一些经验来做;)。
    猜你喜欢
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-12
    • 1970-01-01
    • 1970-01-01
    • 2017-06-11
    • 1970-01-01
    相关资源
    最近更新 更多