使用 dplyr 中的函数输入重命名列

Lal*_* La 3 r dplyr

我知道关于在 R 中重命名列有很多类似的问题,但我仍然没有找到一种优雅的方法来实现这个简单的任务,而这可以在 Python 中轻松完成。

这是一个将 GIS 数据帧转换为空间点的简单函数。但首先我想将坐标列重命名为“lon”和“lat”。一些数据将它们标记为“X”和“Y”,而其他数据可能将它们标记为“long”和“lat”。所以我希望用户指定“lon”和“lat”的列名称。我在用dplyr。但是,以下将不起作用。

library("magrittr")
library("tidyverse")
ToSpatialPoint <- function(data, lon_col="long",lat_col="lati"){
    data %<>% rename(lon=lon_col,lat=lat_col) %<>% distinct(lon,lat) %<>% filter(!is.na(lon),!is.na(lat))
    processed_pts <- SpatialPoints(coords=cbind(lon=data$lon,lat=data$lat), proj4string = CRS("+init=epsg:4326"))
    return(processed_pts)
}
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

Error: `lon_col`, `lat_col` contains unknown variables 
Run Code Online (Sandbox Code Playgroud)

Mia*_*iCG 9

接受的答案对我不起作用,但幸运的是我记得“引用赋值”运算符,它是:

:=

-->

rename(new_variable_name := old_variable_name)

data.table 包在这个小插曲中有关于它的很好的文档。

在 dplyr 中,您必须用sym和包装您传递的变量名称!!(有关帮助的信息!!位于??rlang::quotation)。您的新重命名函数应如下所示:

data %>%
  rename(!!sym(lon_col) := lon,
         !!sym(lat_col) := lat)
Run Code Online (Sandbox Code Playgroud)