如何在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
相关产品推荐
相关产品推荐

