基于T_out列值筛选列生成T_in列的R语言数据处理需求
R语言按条件行级选取列值生成新列
原始数据
首先定义输入数据框:
df1 <- data.frame(ID = c('a', 'b', 'c', 'c1', 'd', 'e', 'f', 'g', 'h', 'h1'), T_10_12 = c(11, 15, 14, 14, 13, 16, 15, 12, 11, 12), T_12_14 = c(12, 16, 16, 16, 14, 17, 16.5, 13, 12, 12), T_14_16 = c(13, 18, 17.5, 16.5, 15, 18, 17.2, 13, 13, 14), T_out = c(10.5, 12.3, 14.5, 15.1, 15, 13, 12, 13, 13, 14))
需求
根据T_out的值,从T_10_12、T_12_14、T_14_16三列中选取对应值生成新列T_in,最终保留ID、T_in、T_out三列,输出结果匹配给定示例。
从示例反推完整取值规则:
- 当
T_out ≤12时,取T_10_12的值 - 当
12 < T_out <14时,取T_12_14的值 - 当
T_out ≥14时,取T_14_16的值
实现方法
方法1:使用dplyr包(推荐)
借助case_when函数实现多条件判断:
library(dplyr) df_result <- df1 %>% mutate(T_in = case_when( T_out <= 12 ~ T_10_12, T_out > 12 & T_out < 14 ~ T_12_14, T_out >= 14 ~ T_14_16 )) %>% select(ID, T_in, T_out) # 输出结果 print(df_result)
方法2:基础R实现
通过条件索引直接赋值:
# 复制原始数据并初始化T_in列 df_result <- df1 df_result$T_in <- NA # 按条件赋值 df_result$T_in[df_result$T_out <= 12] <- df_result$T_10_12[df_result$T_out <= 12] df_result$T_in[df_result$T_out > 12 & df_result$T_out < 14] <- df_result$T_12_14[df_result$T_out > 12 & df_result$T_out < 14] df_result$T_in[df_result$T_out >= 14] <- df_result$T_14_16[df_result$T_out >= 14] # 保留目标列 df_result <- df_result[, c("ID", "T_in", "T_out")] # 输出结果 print(df_result)
运行结果
两种方法都会得到以下输出:
ID T_in T_out 1 a 11.0 10.5 2 b 16.0 12.3 3 c 17.5 14.5 4 c1 16.5 15.1 5 d 15.0 15.0 6 e 17.0 13.0 7 f 15.0 12.0 8 g 16.5 13.0 9 h 13.0 13.0 10 h1 14.0 14.0
内容的提问来源于stack exchange,提问作者Loz
相关产品推荐
相关产品推荐

