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

R中使用pivot_wider报错‘无法子集不存在的列’的求助

解决R中pivot_wider报错"无法子集不存在的列"的问题

你的代码报错主要是两个问题:

  1. 在pivot_wider的参数里用了LMS_df$Title这种带数据框前缀的写法——在tidyverse管道(%>%)里,数据已经自动传递到下一个函数,直接写列名就行,加前缀会让函数找不到当前上下文的列。
  2. -ID的写法不对:pivot_wider不支持直接用这种方式排除列,你需要用id_cols指定要保留的分组列,或者直接让ID作为默认的分组键。

只保留Training_Time的正确写法

LMS_df <- LMS_df %>%
  tidyr::pivot_wider(
    id_cols = ID,  # 指定按ID分组
    names_from = Title,  # 用Title的取值作为新列名
    values_from = Training_Time,  # 用Training_Time的数值填充新列
    names_prefix = "Training_"  # 给新列名加上指定前缀,匹配你要的格式
  )

运行后就能得到你期望的结构:

# A tibble: 1 × 4
     ID Training_New Training_Hazmat Training_Management
  <dbl>        <dbl>           <dbl>               <dbl>
1     1            1               5                  12

同时包含Percent_Complete的写法

如果要把完成率也转成宽表格式,可以指定多个值列,同时用values_fn确保每个分组的取值唯一(你的示例里每个ID对应每个Title的完成率都是100,不会有冲突):

LMS_df <- LMS_df %>%
  tidyr::pivot_wider(
    id_cols = ID,
    names_from = Title,
    values_from = c(Training_Time, Percent_Complete),  # 同时指定两个值列
    names_sep = "_"  # 用下划线分隔值列名和原Title名
  )

运行结果如下:

# A tibble: 1 × 7
     ID Training_Time_New Training_Time_Hazmat Training_Time_Management Percent_Complete_New Percent_Complete_Hazmat Percent_Complete_Management
  <dbl>             <dbl>                <dbl>                    <dbl>                <dbl>                   <dbl>                      <dbl>
1     1                 1                    5                       12                  100                     100                        100

不需要手动为每个Title创建新列,pivot_wider会自动根据Title列的所有唯一值生成对应的新列,哪怕有数百种Title也能自动处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 17:45:15