【问题标题】:How to fill in a dataframe with results from a for loop如何用 for 循环的结果填充数据框
【发布时间】:2020-11-10 18:09:48
【问题描述】:

我正在尝试在 R 中编写一个 for 循环,它计算两个向量(矩阵 [Z] 的第 j 行和一个向量 [F1])之间的距离,并将距离放入一个称为结果的数据框。结果的第一列用年份填充,从 1906 年开始。因此 for 循环将针对 [Z] 的每一行运行此计算,并在每次迭代后填充每一行“结果”。这是我到目前为止的代码 - 如果我删除 for 循环并单独运行每一行(例如,如果我将所有 j 替换为 1),代码会执行我想要的操作,但是当我添加 for 循环时这没用。我没有收到错误消息,但结果数据框中没有显示任何值。如果有人能帮我弄清楚我缺少什么,那就太好了!

顺便说一句,Z 是一个 97 x 22 矩阵,F1 是一个 1 x 22 矩阵。

   results <- data.frame(matrix(nrow = 97, ncol = 2)) 
   colnames(results) <- c("year", "distance")
   for(j in 1:97) {
    data <- as.numeric(Z[c(j),])
    data2 <- as.numeric(t(F1))
    distance <- euclidian.dist(data, data2)
    results[j, 1] <- j + 1905
    results[j, 2] <- distance
   }
   View(results)

【问题讨论】:

    标签: r for-loop


    【解决方案1】:

    你没有指出你从哪里得到euclidean.dist 函数,所以我将在基础 R 中使用dist 函数。我们需要创建一些数据:

    set.seed(42)
    Z <- matrix(runif(97 * 22), 97, 22)
    F1 <- matrix(runif(22), 1, 22)
    

    然后我们针对Z 中的每一行运行F1

    year <- 1906:2002
    distance <- sapply(1:97, function(i) dist(rbind(F1, Z[i, ])))
    results <- data.frame(year, distance)
    str(results)
    # 'data.frame': 97 obs. of  2 variables:
    #  $ year    : int  1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 ...
    #  $ distance: num  2.29 1.85 1.77 2.17 2.17 ...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-21
      • 1970-01-01
      • 1970-01-01
      • 2019-05-11
      • 1970-01-01
      • 2019-05-22
      相关资源
      最近更新 更多