簡體   English   中英

使用dplyr中的函數輸入重命名列

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM