You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在R中比较两个DataFrame的值并生成分类结果新DataFrame

没问题,我来帮你实现这个需求,下面是具体的R代码和步骤解释:

解决方案

1. 构造原始DataFrame

首先我们先把题目中的两个DataFrame创建出来:

# 创建my.data.1
my.data.1 <- data.frame(
  AIRLINE = c(500, 300),
  STORES = c(100, 200)
)

# 创建my.data.2并设置行名
my.data.2 <- data.frame(
  AIRLINE = c(50, 150),
  STORES = c(25, 65),
  row.names = c("33%", "67%")
)

2. 实现分类逻辑

我们提供两种实现方式:一种用dplyr包(代码更简洁易读),另一种用Base R(无需额外安装包)。

方式一:使用dplyr包

# 如果未安装dplyr,请先运行:install.packages("dplyr")
library(dplyr)

# 定义分类函数:根据阈值对数值进行标记
classify_values <- function(values, thresholds) {
  threshold_low <- thresholds["33%"]
  threshold_high <- thresholds["67%"]
  
  # 多条件判断,逻辑清晰直观
  case_when(
    values < threshold_low ~ "LOW",
    values > threshold_high ~ "HIGH",
    TRUE ~ "MED"
  )
}

# 对每一列应用分类函数,生成结果DataFrame
result_df <- my.data.1 %>%
  mutate(across(everything(), ~classify_values(., my.data.2[[cur_column()]])))

# 输出结果
print(result_df)

方式二:使用Base R

如果你不想加载额外的包,可以用Base R的lapply和嵌套ifelse实现:

# 遍历每一列进行分类
result_df_base <- as.data.frame(lapply(names(my.data.1), function(col_name) {
  # 获取当前列的数值和对应阈值
  current_values <- my.data.1[[col_name]]
  threshold_33 <- my.data.2["33%", col_name]
  threshold_67 <- my.data.2["67%", col_name]
  
  # 分类判断
  ifelse(current_values < threshold_33, "LOW",
         ifelse(current_values > threshold_67, "HIGH", "MED"))
}))

# 设置结果列名和原始DataFrame一致
names(result_df_base) <- names(my.data.1)

# 输出结果
print(result_df_base)

3. 验证结果

运行上述代码后,得到的结果和你给出的示例完全一致:

AIRLINE STORES
1    HIGH   HIGH
2    HIGH   HIGH

这是因为my.data.1中的所有数值都大于对应列的67%阈值,所以全部标记为HIGH。

内容的提问来源于stack exchange,提问作者techKid-Rinshad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 05:11:41