[英]Rename all columns of dataframe in dplyr without using rename()
[英]Rename columns using function input in 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)
}
我收到此錯誤:
Error: `lon_col`, `lat_col` contains unknown variables
最后,由於我一位很棒的室友分享了一個鏈接,我自己找出了答案。 tidyverse.org的本文檔介紹了如何使用dplyr
進行編程。 特別是如何獲取函數輸入並在dplyr
對其求值。
以下是將起作用的代碼:
ToSpatialPoint <- function(data,lon_col="long",lat_col="lati"){
lon_col <- enquo(lon_col)
lat_col <- enquo(lat_col)
data %<>% rename(lon=!!lon_col,lat=!!lat_col)
return(data)
}
這是一個示例,請注意,新名稱在左側,而當前名稱在右側。 您也不需要c()
或引號。
require(dplyr)
mtcars %>% rename(miles_per_gallon=mpg, horsepower=hp)
miles_per_gallon cyl disp horsepower drat wt qsec vs am
Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1
Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1
Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1
Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0
Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0
Valiant 18.1 6 225 105 2.76 3.460 20.22 1 0
使用您的示例:
data %>% dplyr::rename(lon = lon_col, lat = lat_col)
接受的答案對我不起作用,但是幸運的是,我想起了“按引用分配”運算符,該運算符是:
:=
->
rename(new_variable_name := old_variable_name)
包data.table 在此小插圖中有很好的文檔。
在dplyr中,您將必須用sym
和!!
封裝要傳遞的字符串!!
(關於!!
幫助在??rlang::quotation
)。 您的新重命名功能應如下所示:
data %>% rename(!!sym(lon_col) := lon, !!sym(lat_col) := lat)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.