如何在R中找出仅属单个car_mod分组的col值及对应行
解决方案
需求说明
从数据框中筛选出col列值仅对应单个car_mod分组的所有行,例如示例中的black仅出现在car2分组中,需输出该值及其所有对应行。
方法一:使用dplyr(适合大数据量,代码简洁高效)
# 安装并加载dplyr(首次使用需安装) # install.packages("dplyr") library(dplyr) # 示例数据 s1 <- data.frame( no = c(1,2,3,4,5,6,7), car_mod = c("car1","car2","car2","car3","car2","car1","car4"), col = c("red","black","red","blue","black","blue","red") ) # 1. 找出仅对应单个car_mod的col值 target_cols <- s1 %>% group_by(col) %>% summarise(unique_car_count = n_distinct(car_mod)) %>% filter(unique_car_count == 1) %>% pull(col) # 2. 筛选原数据中符合条件的行 result <- s1 %>% filter(col %in% target_cols) # 3. 按col分组输出(匹配示例格式) for (color in target_cols) { cat(color, "\n") print(filter(result, col == color)) }
代码说明
n_distinct(car_mod):统计每个颜色对应的不同车型数量pull(col):提取符合条件的颜色向量- 循环输出每个颜色及其对应行,和示例展示格式一致
方法二:基础R实现(无需加载第三方包)
# 示例数据 s1 <- data.frame( no = c(1,2,3,4,5,6,7), car_mod = c("car1","car2","car2","car3","car2","car1","car4"), col = c("red","black","red","blue","black","blue","red") ) # 1. 计算每个col对应的唯一car_mod数量 col_car_count <- tapply(s1$car_mod, s1$col, function(x) length(unique(x))) target_cols <- names(col_car_count[col_car_count == 1]) # 2. 筛选结果行 result <- s1[s1$col %in% target_cols, ] # 3. 按col分组输出 for (color in target_cols) { cat(color, "\n") print(result[result$col == color, ]) }
适用场景
如果数据量较小,基础R方法足够;若数据规模较大,推荐使用dplyr的矢量化操作,效率更高。
内容的提问来源于stack exchange,提问作者lolbye
相关产品推荐
相关产品推荐

