簡體   English   中英

將列名傳遞給 R 中的函數

[英]Passing column name to function in R

我正在從我的數據幀的許多列中刪除 NA。 我的數據框名稱很長,但這是必需的。 一遍又一遍地使用該命令看起來有點混亂,所以我想制作一個函數,使人們更容易理解正在發生的事情。 我做了以下事情:-

ConvNAtoBlank <- function(colname) {
    dataframe[[colname]][is.na(dataframe[[colname]])] = ""
}

這沒有用。 我還嘗試返回數據框並稍后再次將其分配為:-

dataframe <- ConvNAtoBlank("B") # assuming B is a column name

這似乎也不起作用。 我在這里做錯了什么嗎? 我從這個星期一開始學習 R,所以我仍然是一個新手,我無法弄清楚這一點。 任何幫助,將不勝感激。

您需要在函數結束時返回更改后的數據幀。 將數據幀傳遞給函數也是一種很好的做法。

ConvNAtoBlank <- function(dataframe, colname) {
  dataframe[[colname]][is.na(dataframe[[colname]])] = ""
  dataframe
}

df <- data.frame(A = c('A', NA, 'B'), B = c(NA, NA, 'A'))
ConvNAtoBlank(df, "B")

#     A B
#1    A  
#2 <NA>  
#3    B A

我們可以使用tidyverse方法來傳遞帶引號/不帶引號的參數

library(dplyr)
library(tidyr)
ConvNAtoBlank <- function(dataframe, colname) {
     colname <- rlang::ensym(colname)
     dataframe %>%
       mutate(!! colname := replace_na(!! colname, ""))
   }

-測試

df <- data.frame(A = c('A', NA, 'B'), B = c(NA, NA, 'A'))
ConvNAtoBlank(df, "B")
  A B
1    A  
2 <NA>  
3    B A
ConvNAtoBlank(df,  B)
     A B
1    A  
2 <NA>  
3    B A

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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