如何在R语言中基于专属共享值筛选数据框列?
在R中筛选指定行值相同且值仅存在于这些行的列
步骤说明
要实现需求,需分两步筛选:
- 先找出指定行内所有值完全相同的列;
- 再从这些列中,筛选出对应值在整个数据框中仅出现在指定行的列。
示例代码
首先构造你的示例数据框(确保所有值为字符型):
# 构造示例数据框 df <- data.frame( x1 = c("1", "2", "3", "4", "5"), x2 = c("0", "1", "2", "?", "0"), x3 = c("5", "?", "1", "4", "1"), x4 = c("1", "1", "3", "2", "2"), x5 = c("1", "2", "2", "1", "1"), x6 = c("?", "5", "3", "3", "3"), x7 = c("0", "1", "?", "?", "?"), x8 = c("5", "-", "?", "?", "?"), x9 = c("5", "5", "4", "4", "2"), stringsAsFactors = FALSE ) # 指定目标行(示例为第3至5行) target_rows <- 3:5
然后执行筛选逻辑:
# 第一步:筛选指定行内值完全相同的列 same_in_target <- sapply(df, function(col) all(col[target_rows] == col[target_rows[1]])) # 第二步:筛选对应值仅出现在指定行的列 valid_cols <- sapply(names(df)[same_in_target], function(col_name) { target_val <- df[target_rows[1], col_name] # 统计整个列中等于目标值的行数,判断是否等于目标行的数量 sum(df[[col_name]] == target_val) == length(target_rows) }) # 获取最终符合条件的列名 result_cols <- names(df)[same_in_target][valid_cols] result_cols
运行结果
执行后会输出符合条件的列名:"x6" "x7" "x8",和你预期的一致。
代码解释
sapply(df, function(col) ...):遍历数据框的每一列,对列执行自定义判断;all(col[target_rows] == col[target_rows[1]]):检查指定行的所有元素是否和该行第一个元素相同(即所有值一致);sum(df[[col_name]] == target_val):统计整个列中等于目标值的总行数,若等于目标行的数量,说明该值仅出现在指定行中。
内容的提问来源于stack exchange,提问作者Namenlos
相关产品推荐
相关产品推荐

