[英]using variable column names in dplyr summarise
我發現這個問題已經被問到但沒有正確的答案。 R 在匯總中使用變量列名 function 在 dplyr 中
我想計算兩列均值之間的差異,但列名應由變量提供...到目前為止,我發現只有 function as.name
以文本形式提供列名,但這在這里不起作用.. .
使用固定列名稱它可以工作。
x <- c('a','b')
df <- group_by(data.frame(a=c(1,2,3,4), b=c(2,3,4,5), c=c(1,1,2,2)), c)
df %>% summarise(mean(a) - mean(b))
對於可變列,它不起作用
df %>% summarise(mean(x[1]) - mean(x[2]))
df %>% summarise(mean(as.name(x[1])) - mean(as.name(x[2])))
由於這已經是 3 年前提出的,並且dplyr
正在良好開發中,我想知道現在是否有答案。
你可以使用base::get
:
df %>% summarise(mean(get(x[1])) - mean(get(x[2])))
# # A tibble: 2 x 2
# c `mean(a) - mean(b)`
# <dbl> <dbl>
# 1 1 -1
# 2 2 -1
get
將默認在當前環境中搜索。
正如錯誤消息所示, mean
需要一個邏輯或數字對象, as.name
返回一個名稱:
class(as.name("a")) # [1] "name"
您可以評估您的姓名,這也可以使用:
df %>% summarise(mean(eval(as.name(x[1]))) - mean(eval(as.name(x[2]))))
# # A tibble: 2 x 2
# c `mean(eval(as.name(x[1]))) - mean(eval(as.name(x[2])))`
# <dbl> <dbl>
# 1 1 -1
# 2 2 -1
這不是您問題的直接答案,但可能對閱讀您帖子的其他人有用:直接使用變量列可能更容易,例如
df %>% summarise(someName = mean(.[[1]]) - mean(.[[2]]))
############ which is the same as ############
df %>% summarise(someName = mean(.[,1,drop=T]) - mean(.[,2,drop=T]))
請注意, drop=T 是因為當僅使用單個方括號時,結果保留了 class (在本例中為 class( . ) = data.frame),這不是我們想要的(列必須以向量形式給出以進行匯總功能)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.