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

R语言如何对指定值做Pivot转换得到目标数据框结构?

解决方案

你的核心需求是为每个ID匹配对应的唯一日期值,再保留其余非Date类型的行即可,有两种常用实现思路:

方法1:拆分匹配法(逻辑最直观,性能更高)

先单独提取每个ID对应的日期映射表,再和原数据中排除Date类型的行做关联,代码如下:

library(tidyverse)

# 构造ID与日期的映射表
date_map <- df %>%
  filter(Type == "Date") %>%
  select(ID, Date = Parameter)

# 过滤原数据的Date行后关联日期
result <- df %>%
  filter(Type != "Date") %>%
  left_join(date_map, by = "ID")

方法2:宽表中转法(适配你原本尝试的pivot逻辑)

先按ID聚合转宽表拿到所有字段,再把非Date的字段转回长格式即可:

library(tidyverse)

result <- df %>%
  pivot_wider(names_from = Type, values_from = Parameter) %>%
  # 把Text、Value列转回长格式,自动丢弃空值
  pivot_longer(cols = c(Text, Value), 
               names_to = "Type", 
               values_to = "Parameter",
               values_drop_na = TRUE)

基础R实现(无需加载第三方包)

如果不想依赖tidyverse,用基础函数也可以实现:

# 生成ID日期映射
date_map <- aggregate(Parameter ~ ID, df[df$Type == "Date", ], FUN = identity)
colnames(date_map)[2] <- "Date"
# 关联过滤后的原数据
result <- merge(df[df$Type != "Date", ], date_map, by = "ID")

以上三种方法输出的结果都和你需要的目标格式完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 08:06:04