2017-03-08 86 views
1

我一直試圖提取傳遞給dplyr :: mutate()函數的變量的名稱,但未成功。下面是一個簡單的例子,我想創建一個返回字符串「英里」內發生變異的功能:只要R dplyr - 在mutate/summarize中獲取字符串的變量名稱

# mtcars dataset with grouping variable 
dataset = mtcars 
dataset$group = c(1, 2, 3, 4) 

# function to call inside mutate() 
f = function(col, data){ 
    str_col = deparse(lazyeval::expr_find(col)) 
    str_col 
} 

# this does not work: returns the content of mpg 
# instead of the variable name as a string 
dataset %>% 
    group_by(group) %>% 
    mutate(f = f(mpg, dataset) 
) %>% 
    select(group, f) 

我用lazyeval :: expr_find(),因爲只有替補多「上升」一層我理解了文檔。當我在函數wrap()中調用f()時,它起作用,但它返回mpg的內容,而不是當我將其放入group_by()%>%mutate()中時名稱「mpg」的內容。一些相關的問題,但沒有一個能夠解決我的問題。

任何幫助,不勝感激:)

+1

f_updated簡直是要產生1的值看起來你只是試圖將總和除以總和?如果是這樣的話:%dataset%>% dplyr :: select(mpg,group)%>% mutate(tot.sum = sum(mpg))%>% group_by(group)%>% summary(result = sum(mpg)/ mean(tot.sum))' –

+0

我擔心我的文本有點誤導,sry ... sum(mpg)/ sum(。$ mpg)已經有了這個伎倆,但那只是一個小小的例如檢查我是否得到相同的輸出。我的問題是,當我將它傳遞給mutate()中的某個函數時,我想要獲取變量名作爲字符串,並且該工作還沒有正常工作:(thx雖然! – Christoph

+1

是的,我不知道你的實際問題是什麼 –

回答

1

我還沒有什麼你正在嘗試做完全清楚,但也許這會有所幫助:

f = function(col, data){ 
    str_col = deparse(substitute(col)) 
    data.frame(str_col) 
} 

dataset %>% 
    group_by(group) %>% 
    do(f(mpg, .)) 
+0

Thx,對於混淆抱歉...我想要做的是將函數fa列名和數據幀傳遞給mutate。解析列名轉換成字符串(因爲dplyr使用非標準的評估),然後用它來做數據幀[,col_name_as_string]這樣我就可以與原始數據幀列在裏面工作GROUP_BY 基本上,我想打電話給該功能: F =函數(COL,數據){ str_col = deparse(替代(COL)) 總和(COL)/數據[,str_col] } 但這並不不幸工作,因爲deparse(替代())部分未返回內部發生變異變量名 – Christoph