2015-06-25 38 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) })