You need to enable JavaScript to run this app. R语言如何基于let列的字母条件提取对应High、Low列数值?
优惠活动
大模型
产品
解决方案
定价
更多

R语言如何基于let列的字母条件提取对应High、Low列数值?

解决方法

你要的效果可以直接用tidyr::pivot_wider(长表转宽表)实现,不需要手动逐个定义变量,自动按let列的字母匹配取值,缺失时段自动填充NA,不会丢弃任何日期:

# 加载依赖包
library(tidyverse)

# 长表转宽表
df_wide <- df %>%
  pivot_wider(
    id_cols = day_month,
    names_from = let,
    values_from = c(High, Low),
    # 自定义列名格式,直接生成high_A、low_a这种符合要求的变量名
    names_glue = "{tolower(.value)}_{.name}"
  )

如果确实想沿用手动 summarise的写法,避免丢行的话,需要给取值加默认NA,替换你的subset写法即可:

df_2 <- df %>% 
  group_by(day_month) %>% 
  summarise(
    high_A = first(High[let == "A"], default = NA),
    low_A = first(Low[let == "A"], default = NA),
    # 其余变量按同样格式写即可
    .groups = "drop"
  )

之前方法的问题说明

  1. 按行号用nth取值:如果某日期缺失了部分时段,行号对应关系就会错乱,取到的是错误时段的数值
  2. 用subset取值:当某日期没有对应字母的时段时,subset返回长度为0的空向量,summarise会直接丢弃该日期分组,导致日期缺失

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 08:48:02