R 语言 数据切片,对每个切片组分别操作

来源:互联网 发布:买家怎么进入淘宝客 编辑:程序博客网 时间:2024/06/13 05:47

R语言中处理frame数据框,根据某一列进行切片分组,之后对每一组进行排序、挑选等操作。

用到的函数主要是splite() lapply() sapply() 其中sapply()可以能够简化输出形式,即如果能把列表简化成矩阵形式那么就转化,如果不能就输出列表。

在下面这个例子中,对于数据框,依据"group"列分为三组,对于每一组,我们依据"value"列进行排序,当出现排序值一样的时候,再依据"number"进行排序:


> group <- sample(letters[1:3],10,replace=TRUE)> number <- sample(1:4,10,replace=TRUE)> value <- sample(c(1.2,2.1,0.5,0.8,1.5),10,replace=TRUE)> testData <- data.frame(group,number,value)> groupData <- split(testData, testData$group)> groupData$a  group number value3     a      4   0.84     a      4   0.85     a      3   1.2$b  group number value2     b      3   1.26     b      3   2.18     b      3   1.2$c   group number value1      c      1   2.17      c      4   1.29      c      2   1.510     c      3   1.5> orderData <- lapply(groupData, function(x){x[order(x[,3],x[,2]),]})> orderData$a  group number value3     a      4   0.84     a      4   0.85     a      3   1.2$b  group number value2     b      3   1.28     b      3   1.26     b      3   2.1$c   group number value7      c      4   1.29      c      2   1.510     c      3   1.51      c      1   2.1> selectData <- sapply(orderData, function(x,y){x[y,]}, 2)> selectData       a        b        c       group  factor,1 factor,1 factor,1number 4        3        2       value  0.8      1.2      1.5     > selectData <- sapply(orderData, function(x,y){x[y,]}, 4)> selectData       a        b        c       group  factor,1 factor,1 factor,1number NA       NA       1       value  NA       NA       2.1     > 


解释:

在上边代码中 ,

groupData <- split(testData, testData$group) 语句把数据框分片;

orderData <- lapply(groupData, function(x){x[order(x[,3],x[,2]),]}) 把每一个分片数据框进行排序,其中内部自定函数中x[order(x[,3],x[,2]),] 可以先按照第三列再按照第二列排序;

selectData <- sapply(orderData, function(x,y){x[y,]}, 2) 该语句中通过自定一个2输入参数的函数,来给sapply调用的函数传递第二个参数。




0 0
原创粉丝点击