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

使用pivot_wider转换数据时触发vec_as_location()错误求助

问题描述

数据构造代码:

v<-as.numeric(c(rep(c(1,2,3), 3)))
n<-as.factor(c(rep("a", 3), rep("b", 3), rep("c", 3)))
t<-data.frame(v, n)
str(t)

在RStudio 2021.9.0.351中使用tidyr 1.1.4版本执行转宽代码:

t.wide<-t%>%pivot_wider(names_from=n, values_from=v)

触发错误:

Error in `vec_as_location()`:
! `...` must be empty.
✖ Problematic argument:
• call = call
解决方案

这个错误的核心原因是:你的长格式数据中,每个n的分组(a、b、c)都对应3个重复的v值,tidyr 1.1.4版本的pivot_wider无法自动处理这种一对多的映射,必须明确指定重复值的处理方式。

有两种可行的解决方式:

方式1:指定值聚合函数(values_fn)

通过values_fn参数告诉函数如何处理每个分组内的重复值,比如将所有值保留为列表,或者计算均值、求和等:

# 把每个分组的v值保留为列表
t.wide <- t %>% pivot_wider(names_from = n, values_from = v, values_fn = list)

# 或者计算每个分组v值的均值
t.wide <- t %>% pivot_wider(names_from = n, values_from = v, values_fn = mean)

方式2:添加唯一行标识

如果希望每个分组的每个v值对应宽格式中的一行,可以先给每个分组内的行添加唯一编号,再执行转宽:

# 给每个n分组内的行添加id
t <- t %>% group_by(n) %>% mutate(id = row_number()) %>% ungroup()

# 转宽
t.wide <- t %>% pivot_wider(names_from = n, values_from = v)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 04:01:24