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