You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 10:20:09