【问题标题】:How to multiple 2 columns using [nested for loop] in a dataframe in r [duplicate]如何在 r 的数据框中使用 [嵌套 for 循环] 来多 2 列 [重复]
【发布时间】:2016-04-17 15:00:24
【问题描述】:

这真的让我发疯了。假设我有 3 个数据集,我正在组合成一个数据框。

    a = c(1,2,3,4)
    b = c(2,4,6,8)
    c = c(3,6,9,12)

    d = as.data.frame(cbind(a,b,c)) # combined dataframe

我可以写:

    multiply = d[,1]*d[,2]*d[,3]
    #[1]   6  48 162 384

但这在我有很多列的情况下是不可行的,所以我需要嵌套的for循环语句,所以这是我尝试的:

   for (col in 1:ncol(d)){
    for (j in 1:ncol(d)){
   multiply=0
   multiply = d[,col]*d[,j]
    }
  }
  print(multiply)
  #[1]   9  36  81 144

它只占用了第 2 列和第 3 列的倍数。为什么????我的嵌套for循环的任何改进都将受到高度赞赏,这是我有兴趣了解的更多信息。

请不要建议涉及使用应用功能的解决方案。我已经知道了。

【问题讨论】:

  • 因为我想了解 for 循环是如何工作的。我显然做错了什么,因为我没有得到正确的答案。

标签: r loops for-loop


【解决方案1】:

我们可以使用Reduce

 Reduce(`*`, d)
 #[1]   6  48 162 384

或与rowProds 来自library(matrixStats)

library(matrixStats)
rowProds(as.matrix(d))
#[1]   6  48 162 384

如果我们需要for 循环

v1 <- rep(1, nrow(d))
for(j in seq_along(d)){
  v1 <- v1*d[,j]
 }
v1
#[1]   6  48 162 384

【讨论】:

  • 你能改进我问题中的for循环语句吗?这将有助于我更好地理解。谢谢
  • @BoroDega 上述解决方案应该适用于您拥有的尽可能多的列。为什么需要for 循环?
  • 我真的很想了解r中嵌套for循环语句背后的逻辑以及它是如何工作的。
  • @BoroDega 我更新了for 循环,但没有更新nested for 循环。希望对你有帮助
  • @BoroDega 补救措施已在我的帖子中显示。如果您正在执行不必要的嵌套循环,则不使用该嵌套循环是补救措施。故事结局。这是不必要的,因为您的结果不需要嵌套..
猜你喜欢
  • 2021-02-27
  • 2016-05-09
  • 2017-11-06
  • 1970-01-01
  • 1970-01-01
  • 2019-05-21
  • 1970-01-01
  • 1970-01-01
  • 2017-08-02
相关资源
最近更新 更多