如何在R中移除Gest值≤GA的对应Gest、Sys、Dia变量
解决方案
1. 提取所有Gest/Sys/Dia的组编号
先从数据框列名里自动提取所有组的数字后缀,不管有多少个组(60+也适用)都能适配:
# 抓取所有以Gest开头的列,提取数字部分 group_nums <- sub("Gest(\\d+)", "\\1", grep("^Gest", colnames(DF1), value = TRUE))
2. 批量处理每组数据
循环每个组,判断对应Gest值是否≤GA,若是就把该组的Gest、Sys、Dia对应行设为NA:
for(num in group_nums) { # 拼接当前组的三个列名 gest_col <- paste0("Gest", num) sys_col <- paste0("Sys", num) dia_col <- paste0("Dia", num) # 找出需要置为NA的行 na_rows <- DF1[[gest_col]] <= DF1$GA # 批量赋值NA DF1[na_rows, c(gest_col, sys_col, dia_col)] <- NA }
处理后效果
运行完代码,DF1就会变成你要的格式:
| ID | Gest1 | Sys1 | Dia1 | Gest2 | Sys2 | Dia2 | Gest3 | Sys3 | Dia3 | GA |
|---|---|---|---|---|---|---|---|---|---|---|
| 1 | NA | NA | NA | NA | NA | NA | 172 | 120 | 90 | 165 |
| 2 | NA | NA | NA | 170 | 120 | 80 | 180 | 129 | 86 | 167 |
补充说明
- 这个方法不需要手动列所有组,自动识别所有
Gest开头的列,不管数量多少都能处理 - 核心是通过列名的数字后缀关联对应的Sys、Dia列,实现批量操作
内容的提问来源于stack exchange,提问作者19056530
相关产品推荐
相关产品推荐

