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

如何按Numeric_variable分组拆分数据集并保留全1单元至两个子集?

解决方案

核心思路

先识别每个Unit的数值特征:

  • 包含数值2的Unit(A、C)归为第一组
  • 包含数值3的Unit(B、D)归为第二组
  • 所有数值均为1的Unit(E、F)作为公共部分,同时加入两个分组

使用dplyr实现(推荐)

加载dplyr包后按步骤操作:

library(dplyr)

# 1. 标记每个Unit所属分组
unit_groups <- df %>%
  group_by(Unit) %>%
  summarise(
    has_2 = 2 %in% Numeric_variable,
    has_3 = 3 %in% Numeric_variable,
    all_1 = all(Numeric_variable == 1),
    .groups = "drop"
  ) %>%
  mutate(group = case_when(
    has_2 ~ "group1",
    has_3 ~ "group2",
    all_1 ~ "common"
  ))

# 2. 提取公共部分数据
common_data <- df %>% filter(Unit %in% unit_groups$Unit[unit_groups$group == "common"])

# 3. 生成目标数据集
df1 <- df %>%
  filter(Unit %in% unit_groups$Unit[unit_groups$group == "group1"]) %>%
  bind_rows(common_data)

df2 <- df %>%
  filter(Unit %in% unit_groups$Unit[unit_groups$group == "group2"]) %>%
  bind_rows(common_data)

使用Base R实现

无需额外包,用基础R代码完成:

# 1. 提取每个Unit的唯一数值集合
unit_unique_vals <- tapply(df$Numeric_variable, df$Unit, unique)

# 2. 筛选各分组对应的Unit
group1_units <- names(unit_unique_vals)[sapply(unit_unique_vals, function(x) 2 %in% x)]
group2_units <- names(unit_unique_vals)[sapply(unit_unique_vals, function(x) 3 %in% x)]
common_units <- names(unit_unique_vals)[sapply(unit_unique_vals, function(x) all(x == 1))]

# 3. 合并生成最终数据集
df1 <- rbind(df[df$Unit %in% group1_units, ], df[df$Unit %in% common_units, ])
df2 <- rbind(df[df$Unit %in% group2_units, ], df[df$Unit %in% common_units, ])

结果验证

运行代码后,df1会包含A、C、E、F的所有记录,df2会包含B、D、E、F的所有记录,与你期望的输出完全匹配。

内容的提问来源于stack exchange,提问作者Dan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 10:54:36