如何在R 4.3原生管道中重命名数据框列名?
解决方案
你可以用以下几种base R方法,把修改列名的步骤直接整合到原生管道中,无需调用dplyr:
方法1:使用匿名函数块(最灵活,适配任意列数)
在管道末尾添加一个匿名函数,直接修改第一列列名并返回数据框:
unrevised_df <- df |> within(Delta <- realtime_period - date) |> na.omit() |> subset(Delta == ave(Delta, date, FUN = min)) |> subset(Delta < 60) |> within(date <- zoo::as.yearmon(format(date, format = '%Y-%m-%d'))) |> subset(select = -c(Delta, realtime_period)) |> {\(x) {colnames(x)[1] <- "Date"; x}}()
方法2:使用setNames()(适合列数固定的场景)
如果确定最终数据框只有date和UNRATE两列,可以直接用setNames()指定新列名:
unrevised_df <- df |> within(Delta <- realtime_period - date) |> na.omit() |> subset(Delta == ave(Delta, date, FUN = min)) |> subset(Delta < 60) |> within(date <- zoo::as.yearmon(format(date, format = '%Y-%m-%d'))) |> subset(select = -c(Delta, realtime_period)) |> setNames(c("Date", "UNRATE"))
方法3:使用colnames<-赋值函数(函数式风格)
利用R的原生赋值函数,通过replace()修改第一列列名:
unrevised_df <- df |> within(Delta <- realtime_period - date) |> na.omit() |> subset(Delta == ave(Delta, date, FUN = min)) |> subset(Delta < 60) |> within(date <- zoo::as.yearmon(format(date, format = '%Y-%m-%d'))) |> subset(select = -c(Delta, realtime_period)) |> `colnames<-`(replace(colnames(.), 1, "Date"))
执行任意一种方法后,查看结果:
head(unrevised_df) # Date UNRATE # 146 Feb 1960 4.8 # 1065 Mar 1960 5.4 # 1984 Apr 1960 5.0 # 2903 May 1960 4.9 # 3822 Jun 1960 5.5 # 4741 Jul 1960 5.4
内容的提问来源于stack exchange,提问作者Thomas Philips
相关产品推荐
相关产品推荐

