使用 vars 函数重命名 dplyr 中的列时出现字符向量错误
charcter vector error when using vars function to rename columns in dplyr
我正在尝试获取具有日期的财务数据并创建摘要 table。为此,我将数据转换为宽格式,然后想重命名生成的新列,否则它们将显示为日期。
我相信我在使用 "rename_at" 时向 "vars" 提供了一个字符向量,但它抛出了一个错误,我不知道为什么。我在这里找到这个 link 作为如何重命名多个列的示例
所需的输出如下所示:
可重现的例子
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
在此先感谢您的帮助!
我们需要 ,
在 ~
之前。 ~
部分类似于匿名函数调用,而不是带有 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
我正在尝试获取具有日期的财务数据并创建摘要 table。为此,我将数据转换为宽格式,然后想重命名生成的新列,否则它们将显示为日期。
我相信我在使用 "rename_at" 时向 "vars" 提供了一个字符向量,但它抛出了一个错误,我不知道为什么。我在这里找到这个 link 作为如何重命名多个列的示例
所需的输出如下所示:
可重现的例子
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
在此先感谢您的帮助!
我们需要 ,
在 ~
之前。 ~
部分类似于匿名函数调用,而不是带有 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