gpt4 book ai didi

r - 遍历列并计算R中满足条件的行

转载 作者:行者123 更新时间:2023-12-04 11:00:45 25 4
gpt4 key购买 nike

尝试编写一个 for 循环函数来确定第 34 列中的住宿成本高于第 23 列中的住宿成本的学校数量。

numrows <- dim(schools)[1]
for(ii in 1:numrows){
if(schools[ii, 34] > schools[ii, 23], na.rm = TRUE){
nrow(numrows)
}
}

我收到以下错误
Error in if (schools[ii, 34] > schools[ii, 23]) { : 
missing value where TRUE/FALSE needed

我确实注意到缺少一些董事会成本,我想在比较中忽略这些成本。另外,我只期待满足条件的行数。

最佳答案

为了进一步证明我的观点,这里有一个基于 10,000 行样本的简单示例 data.frame

set.seed(2018)
df <- data.frame(one = runif(10^4), two = runif(10^4))

运行 microbenchmark分析
library(microbenchmark)
res <- microbenchmark(
vectorised = sum(df[, 1] > df[, 2]),
for_loop = {
ss <- 0
for (i in seq_len(nrow(df))) if (df[i, 1] > df[i, 2]) ss <- ss + 1
ss
})

res
# Unit: microseconds
# expr min lq mean median uq
# vectorised 59.681 65.13 78.33118 72.8305 77.9195
# for_loop 346250.957 359535.08 398508.54996 379421.2305 426452.4265
# max neval
# 152.172 100
# 608490.869 100

library(ggplot2)
autoplot(res)

enter image description here

请注意 for 之间的四个数量级 (!!!) 差异(即 10,000 倍!)循环和矢量化操作。既不意外也不有趣。

关于r - 遍历列并计算R中满足条件的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58811169/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com