亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在dplyr函數中使用變量名

在dplyr函數中使用變量名

慕勒3428872 2019-12-13 15:10:40
我想在中使用變量名作為字符串dplyr。請參閱以下示例:df <- data.frame(       color = c("blue", "black", "blue", "blue", "black"),       value = 1:5)filter(df, color == "blue")它運行完美,但是我想color通過字符串來引用,就像這樣:var <- "color"filter(df, this_probably_should_be_a_function(var) == "blue").我很樂意以任何方式做到這一點,并且非常樂于使用易于閱讀的dplyr語法。
查看完整描述

3 回答

?
守著一只汪

TA貢獻1872條經驗 獲得超4個贊

對于dplyr版本[0.3-0.7)(?-2017年6月)

(有關最新dplyr版本,請參閱此問題的其他答案)


從使用非標準評估(NSE,請參見發布和小插圖)的dplyr 0.3每個dplyr功能開始, 標準評估(SE)雙胞胎以下劃線結尾。這些可用于傳遞變量。因為會的。使用您可能會將邏輯條件作為字符串傳遞。filterfilter_filter_


filter_(df, "color=='blue'")


#   color value

# 1  blue     1

# 2  blue     3

# 3  blue     4

用邏輯條件構造字符串當然很簡單


l <- paste(var, "==",  "'blue'")

filter_(df, l)



查看完整回答
反對 回復 2019-12-14
?
LEATH

TA貢獻1936條經驗 獲得超7個贊

在較新的版本中,我們可以使用我們可以創建帶引號的變量,然后取消引號(UQ或!!)以進行評估


var <- quo(color)

filter(df, UQ(var) == "blue")

#   color value

#1  blue     1

#2  blue     3

#3  blue     4

由于運算符的優先級,我們可能需要()環繞!!


filter(df, (!!var) == "blue")

#   color value

#1  blue     1

#2  blue     3

#3  blue     4

對于新版本,||優先級更高,因此


filter(df, !! var == "blue")

應該工作(如@Moody_Mudskipper評論)


較舊的選項

我們還可以使用:


 filter(df, get(var, envir=as.environment(df))=="blue")

 #color value

 #1  blue     1

 #2  blue     3

 #3  blue     4

編輯:重新排列解決方案的順序



查看完整回答
反對 回復 2019-12-14
?
牛魔王的故事

TA貢獻1830條經驗 獲得超3個贊

從dplyr 0.7開始,某些情況再次發生了變化。


library(dplyr)

df <- data.frame( 

  color = c("blue", "black", "blue", "blue", "black"), 

  value = 1:5)

filter(df, color == "blue")


# it was already possible to use a variable for the value

val <- 'blue'

filter(df, color == val)


# As of dplyr 0.7, new functions were introduced to simplify the situation

col_name <- quo(color) # captures the current environment

df %>% filter((!!col_name) == val)


# Remember to use enquo within a function

filter_col <- function(df, col_name, val){

  col_name <- enquo(col_name) # captures the environment in which the function was called

  df %>% filter((!!col_name) == val)

}

filter_col(df, color, 'blue')

dplyr編程插圖中介紹了更多一般情況。



查看完整回答
反對 回復 2019-12-14
  • 3 回答
  • 0 關注
  • 538 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號