温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

R语言中apply和tapply怎么用

发布时间:2022-01-05 20:40:19 来源:亿速云 阅读:209 作者:iii 栏目:大数据

本篇内容介绍了“R语言中apply和tapply怎么用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

一、apply()函数

apply函数可将一个任意函数“应用”到矩阵、数组、数据框的任何维度上。使用格式如下:

apply(x, MARGIN, FUN, ...)

其中x为数据对象,MARGIN是维度的下标,FUN是由你指定的函数,而...则包括了任何想传递给FUN的参数。在矩阵或数据框中, MARGIN=1表示行, MARGIN=2表示列。

示例如下:

set.seed(100)mydata <- matrix(rnorm(30), nrow=6) #生成随机数mydata            [,1]        [,2]        [,3]       [,4]       [,5]
[1,] -0.50219235 -0.58179068 -0.20163395 -0.9138142 -0.8143791
[2,]  0.13153117  0.71453271  0.73984050  2.3102968 -0.4384506
[3,] -0.07891709 -0.82525943  0.12337950 -0.4380900 -0.7202216
[4,]  0.88678481 -0.35986213 -0.02931671  0.7640606  0.2309445
[5,]  0.11697127  0.08988614 -0.38885425  0.2619613 -1.1577295
[6,]  0.31863009  0.09627446  0.51085626  0.7734046  0.2470760

利用apply求均值

apply(mydata, 2, mean)[1]  0.1454680 -0.1443698  0.1257119  0.4596365 -0.4421267apply(mydata, 2, mean, trim=0.2) #去掉端值[1]  0.1220539 -0.1888731  0.1008213  0.3403341 -0.4355267

注:FUN可为任意R函数,这也包括你自行编写的函数。

二、tapply()函数

tapply()函数可根据因子、向量和要计算的函数计算,使用格式如下:

tapply(X, INDEX, FUN = NULL, ..., simplify = TRUE)

其中X通常是一向量;INDEX是一个list对象,且该list中的每一个元素都是与X有同样长度的因子;FUN是需要计算的函数;simplify是逻辑变量,若取值为TRUE(默认值),且函数FUN的计算结果总是为一个标量值,那么函数tapply返回一个数组;若取值为FALSE,则函数tapply的返回值为一个list对象。

示例如下:

Student <- c("John Davis", "Angela Williams", "Bullwinkle Moose",
"David Jones", "Janice Markhammer", "Cheryl Cushing",
"Reuven Ytzrhak", "Greg Knox", "Joel England",
"Mary Rayburn")
Math <- c(502, 600, 412, 358, 495, 512, 410, 625, 573, 522)
English <- c(25, 22, 18, 15, 20, 28, 15, 30, 27, 18)
roster <- data.frame(Student, Math, English,stringsAsFactors=FALSE)


roster$grade[roster$Math <= 500] <- "A"
roster$grade[roster$Math > 500] <- "B"


roster
             Student Math English grade
         John Davis  502      25     B
    Angela Williams  600      22     B
   Bullwinkle Moose  412      18     A
        David Jones  358      15     A
  Janice Markhammer  495      20     A
     Cheryl Cushing  512      28     B
     Reuven Ytzrhak  410      15     A
          Greg Knox  625      30     B
       Joel England  573      27     B
       Mary Rayburn  522      18     B

1)应用前面的apply求数学和英语的平均分

apply(roster[,c(2,3)],2,mean)Math English   500.9    21.8

2)当需要分组计算时候,使用tapply函数

tapply(roster[,"English"], roster[,"grade"], mean) A  B 17 25

注:当index不是因子时,可以用as.factor()把参数强制转换成因子

3)aggregate函数同样可以得到类似的结果:

aggregate(x=roster[c('English')], by = list(roster$grade), FUN=mean)

4)实现类似excel的透视表功能

attach(roster)tapply(English,list(Student,grade),mean)                    A  BAngela Williams   NA 22Bullwinkle Moose  18 NACheryl Cushing    NA 28David Jones       15 NAGreg Knox         NA 30Janice Markhammer 20 NAJoel England      NA 27John Davis        NA 25Mary Rayburn      NA 18Reuven Ytzrhak    15 NA

“R语言中apply和tapply怎么用”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI