【发布时间】:2021-03-15 23:41:36
【问题描述】:
我在开发基于特定条件更新数据帧的函数/算法时遇到了困难。我已经查看了一些与通过 for 循环“更新”数据帧相关的答案,但我仍然卡住了。
假设我有一个数据框:
df <- data.frame("data_low" = .2143, "data_high" = .7149)
- 其中 data_low 和 data_high 是数据框中某些列的最大值和最小值
我还有两个功能:
checker(b[1,])
- 获取data_high 和data_low 的值,并返回一个标量。如果标量小于 1,我想将其存储在另一个数据框中,比如“d”。否则,我想用以下函数拆分“b”:
splitter()
- 将“b”除以 data_high 和 data_low 的中位数。
我考虑过尝试用循环来开发它:
storage <- data.frame(data_low = double(), data_high = double()
for( i in 1:nrow(b)){
if(checker(b[i,]) <1){
storage <- splitter(b[i,])
} else {
temp <- splitter(b[i,])
b <- rbind(b,temp)
}
}
两次迭代后我想要的输出(每行检查>1:
** 显然这些数字是随机挑选的,我只是希望获得一些与基于案例循环/更新数据帧相关的直觉..
starting at i = 0:
| .2143 | .7149 |,
i = 2
| .2143 | .4442 | ** Note at splitter() should break this into 2 rows after i = 2 is complete.
| .4442 | .7149 | ** And again here
i = 3
| .2143 | .3002 |
| .3002 | .4442 |
| .4442 | .5630 |
| .5630 | .7149 |
谁能给我一些关于如何组织这个循环的提示?我认为我的问题与 rbind 和/或 b 的实际更新有关。
我认识到大部分代码是不可重现的,但我对这里的虽然过程更感兴趣。
任何帮助将不胜感激!
【问题讨论】:
-
我认为您不需要循环。所有这些都可以向量化。首先构造检查器,以便它获取低值和高值并返回一个逻辑向量。使用该向量将选定的行提取到
d。然后从原始数据框中删除这些行并计算中位数向量。用它来划分两组。
标签: r