R数据分析:apply()的各种变体你分清了吗?

apply函数可以看作是循环的替代方法,在R语言中,apply函数的变体有很多,好多时候同学搞不清到底该用apply呢,还是tapply呢还是sapply呢。今天就给大家系统地写一写。

The apply() function can be feed with many functions to perform redundant application on a collection of object (data frame, list, vector, etc.). The purpose of apply() is primarily to avoid explicit uses of loop constructs.

apply函数的重要作用就是把一个函数给一群数据应用上,这个一群数据可以是data frame, list, vector等等,有什么好处呢?它可以大大地提高代码的整洁性和灵活性。

本文章会给大家详细介绍以下函数:

  • apply() function
  • lapply( )function
  • sapply() function
  • tapply() function

apply() 函数

apply() takes Data frame or matrix as an input and gives output in vector, list or array.

apply需要的输入是一个矩阵或者数据框,但是输出却不是这两个类型,这个是需要注意的,一般而言,apply的用法如下:

apply(X, MARGIN, FUN)

上面的形式中X代表我们输入的数据框或者矩阵,MARGIN为应用函数的方向,可以取1或者2,1代表行,2代表列,FUN就是你要应用的函数。

看例子:

m1 <- matrix(C<-(1:10),nrow=5, ncol=6)
m1
a_m1 <- apply(m1, 2, sum)
a_m1

以上的代码就是生成了一个矩阵,然后按列进行求和,看输出:

image

lapply() 函数

lapply可以接受的输入类型为list, vector or data frame, 但是其输出是列表,而且是把函数应用到对象的每一个元素,这个与apply不同:

lapply() function is useful for performing operations on list objects and returns a list object of same length of original set.

lapply中的l代表list,lapply的基本用法如下:

lapply(X, FUN)

其中X为输入的数据,FUN为你想应用到数据中每个元素的函数。因为lapply是应用到每一个元素上的,所以就不需要MARGIN这个参数了嘛。

看例子:

movies <- c("SPYDERMAN","BATMAN","VERTIGO","CHINATOWN")
movies_lower <-lapply(movies, tolower)
str(movies_lower)

上面的代码中,我想把所有的大写单词改写成小写单词,我就给所有元素应用tolower就好啦。看输出:

image

此时就全部为小写单词了。

sapply() 函数

sapply() function takes list, vector or data frame as input and gives output in vector or matrix. It is useful for operations on list objects and returns a list object of same length of original set. sapply() function does the same job as lapply() function but returns a vector.

sapply和lapply的做的事情是一样的,但是sapply输出的是向量,lapply输出的是list,这个就是最大的差别。

sapply的一般的用法如下,和lapply一模一样,这儿就不多给大家解释了:

sapply(X, FUN)

直接看例子:

dt <- cars
lmn_cars <- lapply(dt, min)
smn_cars <- sapply(dt, min)
lmn_cars

上面的代码中,我把cars这个数据集分别用了lapply和sapply,都是求最小值,看结果:

image

看见没,一个输出是list另一个是向量。就这点区别。

tapply() 函数

tapply() computes a measure (mean, median, min, max, etc..) or a function for each factor variable in a vector. It is a very useful function that lets you create a subset of a vector and then apply some functions to each of the subset.

tapply 和上面的三个就有点不同了,tapply可以将函数用于一个向量中的子集。就是说,先造子集再给子集运用你想运用的函数。非常适合分组统计。

tapply的一般用法为:

tapply(X, INDEX, FUN = NULL)

其中X为你的数据,INDEX为你想要的子集的索引,FUN为你想运用的函数。

还是给大家写一个例子:

我想给鸢尾花数据集分类别求其的花瓣宽度的中位数,我就可以写出如下的代码:

data(iris)
tapply(iris$Sepal.Width, iris$Species, median)
image

上面的代码意思就是我要给irisSepal.Width运用tapply,分组以irisSpecies进行,分好组后对每个组运用median函数。

小结

今天给大家写了apply函数的几种变体,大家记住,apply需要MARGIN参数来规定运用函数的方向,lapply和sapply基本一样,唯一的区别就是输出结果的类型不一样,而tapply可以帮我们很快地进行分组统计。

感谢大家耐心看完,自己的文章都写的很细,代码都在原文中,希望大家都可以自己做一做,请关注后私信回复“数据链接”获取所有数据和本人收集的学习资料。如果对您有用请先收藏,再点赞转发。

也欢迎大家的意见和建议。

如果你是一个大学本科生或研究生,如果你正在因为你的统计作业、数据分析、论文、报告、考试等发愁,如果你在使用SPSS,R,Python,Mplus, Excel中遇到任何问题,都可以联系我。因为我可以给您提供好的,详细和耐心的数据分析服务。

如果你对Z检验,t检验,方差分析,多元方差分析,回归,卡方检验,相关,多水平模型,结构方程模型,中介调节,量表信效度等等统计技巧有任何问题,请私信我,获取详细和耐心的指导。

If you are a student and you are worried about you statistical #Assignments, #Data #Analysis, #Thesis, #reports, #composing, #Quizzes, Exams.. And if you are facing problem in #SPSS, #R-Programming, #Excel, Mplus, then contact me. Because I could provide you the best services for your Data Analysis.

Are you confused with statistical Techniques like z-test, t-test, ANOVA, MANOVA, Regression, Logistic Regression, Chi-Square, Correlation, Association, SEM, multilevel model, mediation and moderation etc. for your Data Analysis...??

Then Contact Me. I will solve your Problem...

加油吧,打工人!

猜你喜欢:

R数据分析:如何在R中使用mutate

R数据分析:相对小众但是超好用的R包汇总

R数据分析:用R语言做meta分析

R数据分析:使用R语言进行卡方检验

R数据分析:ROC曲线与模型评价实例

R数据分析:贝叶斯定理的R语言模拟

R数据分析:9本R语言书,从入门到进阶都在这了

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,490评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,581评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,830评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,957评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,974评论 6 393
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,754评论 1 307
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,464评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,357评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,847评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,995评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,137评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,819评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,482评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,023评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,149评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,409评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,086评论 2 355

推荐阅读更多精彩内容