指定任意数据行,查找该行值为1的单元格对应的所有列名
解决方案
以下是针对该需求的R语言实现,包含基础R和tidyverse两种实现方式:
步骤1:构造示例数据集
df <- data.frame( X1 = c(1,1,1,1,3,2), X2 = c(2,3,3,1,4,1), X3 = c(1,2,4,2,3,3), X4 = c(3,1,2,3,2,4) )
方式1:基础R实现
直接通过逻辑判断筛选符合条件的列名:
# 封装为可复用函数,支持传入数据集和指定行号 get_one_cols <- function(data, row_idx) { # 行号合法性校验 if (row_idx < 1 || row_idx > nrow(data)) { stop("指定行号超出数据集的有效范围") } # 筛选值为1的列,返回对应列名 names(data)[which(data[row_idx, ] == 1)] }
测试效果
get_one_cols(df, 1) # 输出:"X1" "X3" get_one_cols(df, 2) # 输出:"X1" "X4" get_one_cols(df, 3) # 输出:"X1"
方式2:tidyverse风格实现
如果常用tidyverse生态,可使用以下写法:
library(dplyr) get_one_cols_tidy <- function(data, row_idx) { if (row_idx < 1 || row_idx > nrow(data)) { stop("指定行号超出数据集的有效范围") } data %>% slice(row_idx) %>% select(where(~ .x == 1)) %>% names() }
内容的提问来源于stack exchange,提问作者opposity
相关产品推荐
相关产品推荐

