R中无需循环实现dataframe列值与另一列全量值比较的方法
实现方案
核心逻辑:要判断y列的单个值大于x列所有值,等价于该值大于x列的最大值,该逻辑相比逐元素遍历效率更高,大数据量下优势更明显。
base R 实现(优先推荐)
方案1:最大值比较法(最高效)
直接取x列的全局最大值,和y列做矢量化比较:
temp_df$z <- temp_df$y > max(temp_df$x)
运行后即可得到符合预期的z列。
方案2:sapply 通用实现
如果后续需要调整比较规则(比如改为大于80%的x值等更复杂的逻辑),可以用sapply结合all函数实现:
temp_df$z <- sapply(temp_df$y, function(y_val) all(y_val > temp_df$x))
该方案会遍历y列的每一个值,逐一判断是否大于x列所有值,灵活性更高。
第三方包实现
dplyr 实现
适合tidyverse技术栈用户:
library(dplyr) temp_df <- temp_df %>% mutate(z = y > max(x))
data.table 实现
适合处理超大数据量的场景:
library(data.table) setDT(temp_df)[, z := y > max(x)]
内容的提问来源于stack exchange,提问作者StLouisO
相关产品推荐
相关产品推荐

