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

如何将R语言DataFrame转为宽格式并按规则生成分类列?

R语言实现DataFrame分组转宽及分类标记

完整代码实现

library(dplyr)
library(tidyr)

# 原始数据
example <- data.frame(
  PID = c(1091, 1358, 1087, 2358, 2087, 2091),
  value = c('1','2', '1,4,6', '2', '2', '1')
)

# 转宽格式处理
example_wide <- example %>%
  # 提取PID最后3位作为分组键
  mutate(group_key = substr(as.character(PID), nchar(as.character(PID)) - 2, nchar(as.character(PID)))) %>%
  # 分组内标记A/B
  group_by(group_key) %>%
  mutate(id = c("A", "B")) %>%
  ungroup() %>%
  # 转换为宽格式
  pivot_wider(names_from = id, values_from = c(PID, value)) %>%
  select(-group_key)

# 生成category列
example_solution <- example_wide %>%
  mutate(
    category = case_when(
      (value_A == "1" & value_B == "2") | (value_A == "2" & value_B == "1") ~ "mw",
      value_A == value_B ~ "mm",
      TRUE ~ "other"
    )
  )

# 输出结果
print(example_solution)

步骤说明

  1. 分组并转宽格式

    • 提取PID的最后3位作为分组依据,确保末尾三位相同的PID被分到一组;
    • 给每组内的两行分别标记为"A"和"B",用于转宽时生成对应的PID_A/PID_B、value_A/value_B列;
    • 通过pivot_wider完成长格式到宽格式的转换,最后移除临时的分组键列。
  2. 按规则生成分类列

    • 使用case_when按优先级判断:
      • 若value对是1和2的组合(顺序不限),标记为"mw";
      • 若两个value完全相同,标记为"mm";
      • 其余所有情况统一标记为"other"。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 13:42:52