R中使用pivot_wider报错‘无法子集不存在的列’的求助
解决R中pivot_wider报错"无法子集不存在的列"的问题
你的代码报错主要是两个问题:
- 在
pivot_wider的参数里用了LMS_df$Title这种带数据框前缀的写法——在tidyverse管道(%>%)里,数据已经自动传递到下一个函数,直接写列名就行,加前缀会让函数找不到当前上下文的列。 -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
相关产品推荐
相关产品推荐

