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

如何解决R语言中pivot_longer()运行Sumpk变量时的特定报错

问题原因

你的Sumpk计算代码存在两个匹配逻辑错误:

  • 对med表做宽转长操作时,没有保留分组维度Code,导致后续连接无法按Code维度匹配对应中位数
  • left_join未显式指定连接键,多字段匹配时逻辑混乱,抛出匹配错误

修正后代码

# 注:tidyverse已内置dplyr、lubridate,无需重复加载
library(tidyverse)

df1 <- structure(
  list(date1 = c("2021-06-28","2021-06-28","2021-06-28","2021-06-28"),
       date2 = c("2021-04-02","2021-04-02","2021-04-08","2021-04-08"),
       Code = c("ABC","CDE","ABC","CDE"),
       Week= c("Friday","Friday","Thursday","Thursday"),
       DR1 = c(11,17,14,13),
       DR01 = c(14,11,14,13), DR02= c(14,12,16,17),DR03= c(19,15,14,13),
       DR04 = c(15,14,13,13)),
  class = "data.frame", row.names = c(NA, -4L))

x<-df1 %>% select(starts_with("DR"))
x<-cbind(df1, setNames(df1$DR1 - x, paste0(names(x), "_PV")))
pk<-select(x, date2,Code, Week, DR1, ends_with("PV"))

# 新增.groups = "drop"避免分组警告
med<-pk %>%
  group_by(Code, Week) %>%
  summarize(across(ends_with("PV"), median), .groups = "drop")

# 修正后的Sumpk计算逻辑
Sumpk<-df1%>%
  pivot_longer(-c(date1:Week), names_to = "name", values_to = "value") %>%
  left_join(med %>% 
              rename_with(~str_remove(., "_PV")) %>% 
              pivot_longer(-c(Code, Week), names_to = "name", values_to = "med"),
            by = c("Code", "Week", "name")) %>%
  mutate(new_value = value + med) %>%
  select(-c(value, med)) %>%
  pivot_wider(names_from = name, values_from = new_value, 
              names_glue = '{name}_{name}_PV')

输出说明

运行修正后代码得到的Sumpk表会保留原df1的date1、date2、Code、Week4个公共字段,后续每列对应调整后的DR指标计算值,列名按{原字段名}_{原字段名}_PV规则生成。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 18:09:02