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

R语言中transpose函数为何有时报错?keep.names参数未被识别

问题分析与解决

问题说明

编写的R转置数据框代码多数时候正常运行,但偶尔报错:

Error in transpose(Book5, keep.names = "rn") : 
  unused argument (keep.names = "rn")

使用的代码:

Book5<- read_excel("C:/X/X/X/X/1.1 Croston_Aplha-0.1.xlsx")
X1 <- transpose(Book5,keep.names="rn")

数据框结构:

structure(list(`Row Labels` = c("2019-01-01", "2019-02-01", "2019-03-01", 
"2019-04-01", "2019-05-01", "2019-06-01", "2019-07-01", "2019-08-01", 
"2019-09-01", "2019-10-01", "2019-11-01", "2019-12-01", "2020-01-01", 
"2020-02-01", "2020-03-01", "2020-04-01", "2020-05-01", "2020-06-01", 
"2020-07-01", "2020-08-01", "2020-09-01", "2020-10-01", "2020-11-01", 
"2020-12-01", "2021-01-01", "2021-02-01", "2021-03-01", "2021-04-01", 
"2021-05-01", "2021-06-01", "2021-07-01", "2021-08-01", "2021-09-01", 
"2021-10-01", "2021-11-01", "2021-12-01", "2022-01-01", "2022-02-01", 
"2022-03-01", "2022-04-01", "2022-05-01", "2022-06-01", "2022-07-01", 
"2022-08-01", "2022-09-01", "2022-10-01"), `XYZ|146` = c(0, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 18, 16, 16, 17, 12, 22, 6, 
7, 6, 0, 15, 0, 17, 17, 5, 19, 16, 7, 25, 19, 34, 26, 41, 50, 
29, 42, 20, 14, 16, 27, 10, 28, 21), `XYZ|666` = c(0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 45, 
9, 21, 33, 3, 8, 11, 16, 3, 17, 14, 59, 26, 35, 26, 15, 7, 4, 
4, 2, 7, 6, 2), `XYZ|574` = c(0, 0, 0, 0, 0, 0, 0, 0, 74, 179, 
464, 880, 324, 184, 90, 170, 140, 96, 78, 83, 83, 121, 245, 740, 
332, 123, 117, 138, 20, 42, 70, 70, 42, 103, 490, 641, 488, 245, 
142, 95, 63, 343, 57, 113, 100, 105), `XYZ|851` = c(0, 0, 0, 
0, 0, 0, 0, 0, 0, 206, 1814, 2324, 772, 1116, 1636, 1906, 957, 
829, 911, 786, 938, 1313, 2384, 1554, 1777, 1635, 1534, 1015, 
827, 982, 685, 767, 511, 239, 1850, 1301, 426, 261, 201, 33, 
0, 0, 0, 0, 0, 0)), class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA, 
-46L))

预期输出:
预期输出

报错原因

核心问题是函数名冲突:

  • transpose并非base R自带函数,多个R包都实现了该函数,其中仅data.table包的transpose()支持keep.names参数。
  • 当R环境未加载data.table包,或其他包(如dplyr)的transpose函数优先级更高时,调用的是不支持该参数的版本,从而触发报错。

解决方案

方案1:明确指定使用data.table的transpose函数

直接用包名前缀指定,彻底避免函数冲突:

# 未安装data.table则先运行:install.packages("data.table")
Book5 <- read_excel("C:/X/X/X/X/1.1 Croston_Aplha-0.1.xlsx")
X1 <- data.table::transpose(Book5, keep.names = "rn")

方案2:提前加载data.table包

在代码开头加载data.table包,确保后续调用的是它的transpose函数:

library(data.table)
Book5 <- read_excel("C:/X/X/X/X/1.1 Croston_Aplha-0.1.xlsx")
X1 <- transpose(Book5, keep.names = "rn")

方案3:用tidyverse工具实现相同转置效果

若习惯使用tidyverse生态,可通过pivot_longer+pivot_wider实现等价转置:

library(tidyverse)
Book5 <- read_excel("C:/X/X/X/X/1.1 Croston_Aplha-0.1.xlsx")
X1 <- Book5 %>%
  pivot_longer(cols = -`Row Labels`, names_to = "rn", values_to = "value") %>%
  pivot_wider(names_from = `Row Labels`, values_from = "value")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 09:01:18