如何使用R语言判断data.frame每行是否全为相同字符并筛选对应行
实现方法
你可以直接通过逐行判断非NA值的唯一值数量实现需求,以下是两种常用写法:
1. 基础R写法
首先构造你的示例数据:
df <- data.frame( V1 = c("a", "a", "b", "a"), V2 = c("a", "a", "b", "c"), V3 = c("b", "a", "b", "d"), V4 = c("a", NA, "b", NA), V5 = c("a", NA, NA, NA) )
筛选符合要求的行:
res <- df[apply(df, 1, function(row) { # 剔除当前行的NA值 valid_val <- na.omit(row) # 判断去重后是否只有1种值 length(unique(valid_val)) == 1 }), ]
运行后res就是你要的只包含第2、3行的结果。
2. dplyr(tidyverse生态)写法
如果你习惯用tidyverse语法,可以用rowwise + c_across实现:
library(dplyr) res <- df %>% rowwise() %>% filter(length(unique(na.omit(c_across(everything())))) == 1) %>% ungroup()
内容的提问来源于stack exchange,提问作者leelee
相关产品推荐
相关产品推荐

