2015-06-25 66 views
0

這篇文章包含兩個問題。第一個與第二個有關。首先,假設我想定義一個接收兩個參數的函數:一個數據框和一個變量(列),我想做一些計數或統計。第一次,我必須確定變量的位置。例如,假設我的兩個自由度的第一行是在R中,修復了使用lapply函數的參數

> df 
    person age rent 
     1 23 1000 
     2 35 1.500 

,我的功能就是這樣

> myfun<- function(df, var) 
    { 
    # determining the variable 
    ind<- which(names(df) %in% var) 
    # selecting the variable 
    v <- df[,ind] 

    # rest of function 
    .... 


    } 

我認爲這可能是更容易...是否有某種方式來確定直接?

第二個問題:我有一大堆數據框(一個人口的樣本)。所有的數據框都有相同的變量,其中一個變量就是租金。我想計算每個樣本的租金變量的平均值,我想使用lapply函數。對於一個樣品,我可以做下面的代碼

> mean(sample$rent , na.rm = T) 

所有我要的是做這樣的事情

> apply(list, mean(, variablefix = rent)) 

一種選擇是創建與租金的說法是修復或只有一個新的均值函數一個參數並應用lappy上功能:

>mean_rent <- function(df){...} 
>lapply(df, mean_rent) 

但是,我想辦法利用直接在只有一條線應用功能

有些想法?

+1

如果您只使用一列的函數而不使用'v < - df [,「var」]'?。我這麼問是因爲你說「一列」。當然,爲了選擇多個列,我的問題是無用的。 – SabDeM

+1

'jj <-list(mtcars,mtcars)'; 'lapply(1:length(jj),function(j)mean(jj [[j]] [,「mpg」],na.rm = TRUE))' – user227710

+3

@ user227710我會用'sapply'而不是'lapply '得到一個手段向量。 – josliber

回答

1

問題一:你也可以使用的名稱(即字符串)或包含名稱索引data.frames變量(和向量,矩陣等),所以你只需要做:

myfun<- function(df, var) { 
    # select the column 
    v <- df[,var] 

    # rest of function 
} 

,但更常見的是定義上的向量函數,然後就用myfun調用它(DF [,VAR])

問題二:不是指定的新功能給一個變量,您也可以直接直接傳遞它,即

lapply(list_of_dfs, function(df){ mean(df$rent) })