【问题标题】:Save every iteration of for loop保存 for 循环的每次迭代
【发布时间】:2018-02-13 20:22:08
【问题描述】:

我以前问过这些问题,并在 Saga 的帮助下解决了这个问题。 我正在进行一项模拟研究。我必须重新组织我的结果并继续分析。

我有一个数据矩阵,其中可能包含这样的结果

> data
It S  X     Y   F
1  1  0.5  0.8  2.39
1  2  0.3  0.2  1.56
2  1  1.56 2.13 1.48
3  1  2.08 1.05 2.14
3  2  1.56 2.04 2.45
.......

它显示迭代 S 显示 IT 内部的第二次迭代 X 显示从方法获得的 X 的坐标 Y 显示从方法获得的 Y 坐标 F 显示 F 统计量。

我的问题是我必须为每次迭代找到最小 F 值。所以我必须将每次迭代存储在不同的矩阵或数据帧上,并找到最小的 F 值。

我尝试了很多东西,但没有奏效。任何帮助,想法将不胜感激。

编辑:更新表格信息

这是解决方案:

库(dplyr)

数据 %>% group_by(它) %>% 切片(which.min(F))

小标题:3 x 5

组:它 [3]

 It     S     X     Y     F

1 1 2 0.30 0.20 1.56 2 2 1 1.56 2.13 1.48 3 3 1 2.08 1.05 2.14

但是,我将继续另一个 for 循环,并且我想选择提供上述条件的每个 X 值。

例如,当我使用 data$X[i] 时,此代码不会选择 X 的值(0.30、1.56、2.08)。它在分组之前从“数据”中选择原始值。我怎么解决这个问题?

【问题讨论】:

  • 你能提供一个可复制的例子*.com/questions/5963269/…
  • 你想要的输出是什么?如果为It 的每个值找到F 的最小值,sapply(unique(data$It), function(i) min(subset(data, It == i)$F) 是否有效?

标签: r


【解决方案1】:

我希望这是你所期待的:

> library(dplyr)

> data %>% 
   group_by(It) %>% 
   slice(which.min(F))

# A tibble: 3 x 5
# Groups:   It [3]
     It     S     X     Y     F
  <dbl> <dbl> <dbl> <dbl> <dbl>
1     1     2  0.30  0.20  1.56
2     2     1  1.56  2.13  1.48
3     3     1  2.08  1.05  2.14

【讨论】:

  • 这正是我所需要的。请再给我写信好吗?因为它在我的程序上不起作用@Sagar
  • 我没听懂。你还要我写什么?您收到任何错误吗?
  • 对不起,我明白出了什么问题。我的“数据”是一个矩阵,但据我所知,它应该是一个 tbl。而且我不知道该怎么做
  • 您可以将您的data 转换为data.frame 吗? data &lt;- as.data.frame(data)
  • 成功了。我认为转换数据框不起作用。谢谢你帮助我
最近更新 更多