将函数应用于数据框的块

时间:2013-12-12 12:01:36

标签: r dataframe

我是一名C#程序员,他被要求在R中做一些工作。我需要弄清楚如何多次调用一个函数来传递数据帧的“块”;对于前两列不同的所有行,我需要调用一次函数。

这就是我的意思:

Stratum<-c("FPN", "FPN", "FPN", "MPN", "MPN", "MPN")
Cal<-c("ynnn", "ynnn", "yynn", "ynnn", "ynnn", "yynn")
Band.1<-c(1,2,1,1,2,1)
Band.2<-c(2,3,2,2,3,2)
Regroup<-c("No","Yes","No","Yes","No","No")
decs.data<-data.frame(Stratum,Cal,Band.1,Band.2,Regroup,stringsAsFactors=FALSE)

Stratum  Cal Band.1 Band.2 Regroup
    FPN ynnn      1      2      No
    FPN ynnn      2      3     Yes
    FPN yynn      1      2      No
    MPN ynnn      1      2     Yes
    MPN ynnn      2      3      No
    MPN yynn      1      2      No

对于上面的数据我会调用该函数四次 - 一次传递decdsdata的所有行,其中Stratum =“FPN”和Cal =“ynnn”,然后Stratum =“FPN”和Cal =“ yynn“等等。

该函数不会对这些行进行操作,它会使用它们来确定从光盘加载哪个数据文件以及如何处理它。

我如何在R中以这种方式调用函数?我确信'申请'必须参与,但我正在努力弄清楚如何。

更新: 我不需要data.frame中的所有行作为函数的参数,只需要匹配的行(即第一次调用的行1和2,第二次调用3,第3调用4&amp; 5和第5节。

该功能将根据Stratum&amp ;;加载数据文件。然后,Cal列(例如FPN.ynnn.rdata)根据Band.1,Band.2和Regroup列决定如何处理它。

基本上,decs.data不是我想要操作的数据,而是一个决策矩阵,用于定义哪些频段需要重新分组rdata文件。

1 个答案:

答案 0 :(得分:4)

您正在寻找by。如果您想在decs.data的子集上运行您的函数,使用StratumCal作为拆分变量,您可以执行以下操作:

by(decs.data,decs.data[c('Stratum','Cal')],function)

function是你的职能。