如何在R中筛选出拥有多种水果的姓名列表?
获取拥有两种及以上水果的姓名列表
给定的数据集定义代码如下:
library(tidyverse) name <- c("John","John","John","Peter","Paul","Paul", "Steven", "Steven") fruit <- c("Apple","Apple","Banana","Banana","Cherry","Cherry","Apple","Banana") grunnur <- data.frame(name,fruit) grunnur$name <- factor(grunnur$name) grunnur$fruit <- factor(grunnur$fruit)
方法1:使用dplyr(tidyverse工具链)
通过分组统计唯一水果数量,筛选符合条件的姓名:
grunnur %>% group_by(name) %>% summarise(unique_fruit_count = n_distinct(fruit)) %>% filter(unique_fruit_count >= 2) %>% pull(name)
步骤解析:
group_by(name):按姓名对数据分组summarise(unique_fruit_count = n_distinct(fruit)):计算每组内的唯一水果种类数filter(unique_fruit_count >= 2):保留种类数≥2的分组pull(name):提取最终的姓名列表
方法2:基础R实现
无需依赖tidyverse,用基础R函数也能完成:
# 统计每个姓名对应的唯一水果数量 fruit_counts <- tapply(grunnur$fruit, grunnur$name, function(x) length(unique(x))) # 筛选出数量≥2的姓名 names(fruit_counts[fruit_counts >= 2])
步骤解析:
tapply按姓名分组,对每组的水果列计算唯一值的数量- 从统计结果中提取满足条件的姓名名称
两种方法最终都会返回包含John和Steven的姓名列表。
内容的提问来源于stack exchange,提问作者Gunnar Björn Björnsson
相关产品推荐
相关产品推荐

