首页 > 解决方案 > 使用 vars 函数重命名 dplyr 中的列时出现字符向量错误

问题描述

我正在尝试获取具有日期的财务数据并创建一个汇总表。这样做时,我将数据转换为宽格式,然后想要重命名生成的新列,否则它们将显示为日期。

我相信我在使用“rename_at”时为“vars”提供了一个字符向量,但它抛出了一个错误,我不知道为什么。我在这里找到了这个链接作为如何重命名多个列的示例重命名示例

所需的输出如下所示:

在此处输入图像描述

可重现的例子

library(tidyverse)
library(lubridate)

# data
my_dates <- as.Date(c("2018-05-25", "2018-08-25", "2018-11-25", "2018-05-25", "2018-08-25", "2018-11-25"))
item     <- c("A","A","A","B","B","B")
value    <- c(50:55)

df <- data.frame(my_dates, item, value)

# Dates will become column names and coerced as characters, so need way to refer to them
my_colnames  <- as.character(sort(my_dates, decreasing = TRUE))

# New column names
new_colnames <- c("current", "3M_ago", "6M_ago")

# convert to wide format
df_wide <- df %>%
    spread(key = my_dates, value) %>%
    select(item, my_colnames) %>%
    rename_at(vars(my_colnames) ~ new_colnames)  # throws error here

在此先感谢您的帮助!

标签: rdplyrrenamelubridate

解决方案


我们需要,~. 该~部分类似于匿名函数调用而不是公式对象vars

library(tidyverse)
df %>%
   spread(key = my_dates, value) %>%
   select(item, my_colnames) %>%
   rename_at(vars(my_colnames), ~ new_colnames)
#  item current 3M_ago 6M_ago
#1    A      52     51     50
#2    B      55     54     53

推荐阅读