用R为数据分析插上翅膀

 No one konws everything, and you don't have to.”   --科白君
"R数据分析"专题·第1篇
  编辑 | free傻孩子
  4445字 | 7分钟阅读
本期推送内容
本期为大家推荐在数据分析过程中常用的包dplyr。通过该包中几个函数的单独和/或联合使用能够轻松解决大多数据分析问题。这些函数包括数据排序(arrange),挑选变量(select),筛选变量(filter),添加列/变量(mutate)以及汇总(summarize)。
01

数据排序

像excel一样, R语言也能够对数据分析进行排序。对数据的排序很重要,它不仅能够让我们大概地了解目标变量的数据结构,在画图的过程中排序与某些函数的联用还能够让我们按照期望的方式出图。上代码:

rm(list=ls())
library(tidyverse)
#该报包含了几个常用的R包,包括但不限于dplyr
#调用内部数据
data("mtcars")
#“%>%”读作然后,是一种管道的方式进行数据运算;它的好处用时自见
str(mtcars)
dt<-mtcars %>%
  as_tibble(rownames="names")#data.frame change to tibble
#why?
mtcars
dt
这是原始的data.frame(数据框)数据,可以看到当我们预览数据时会出现一大堆的数据。但是,有时候我们并不关心所有的数据,我们仅仅只为验证数据结构是否符合我们的预期。在此时,显然tibble数据更能满足我们的要求。如下:

当我们想要对数据排序时,我们可能有以下几个要求:

1)对A变量从小到大升序;

dt %>%
  arrange(cyl)
#1)对cyl从小到大升序

2)对A变量从大到小降序;

dt %>%
  arrange(desc(cyl))
#2)对cyl从大到小降序

3)在对A变量从小到大降序后,对B,C变量从小到大降序。

dt %>%
  arrange(desc(cyl,mpg,vs))
#3)先对cyl降序,接着对mpg降序,再对vs降序
02

挑选变量

有时候我们并不需要对所有的变量进行数据分析,我们可能只关心数据中的一两个变量,这样我们只需要把这些关心的变量从原来的数据中拿出来即可。
代码如下:
#select variable
dt %>%
  select(mpg,cyl,gear)
#the other way to select target variable
dt[,c(1,2,11]

但是,当我们的变量比较多时,采用第二种方法挑选目标变量就比较麻烦了。

03

筛选变量

除了挑选变量,有时候我们用的更多的可能是根据一些条件对数据进行筛选,如去除空值"NA"的行,或者选出符合特定条件的行。

1)选出所有vs变量中大于0的值

dt %>%
  filter(vs>0)
#选出除所有vs大于0的值

2)选出所有vs变量中大于0“且”am变量中也大于0的值

dt %>%
  filter(vs>0,am>0)
#选出所有vs大于0,“且”am>0的值

3)选出所有变量中vs“非”0的值

dt %>%
  filter(vs!=0)

4)更多运算符的含义“,”表示“且”,表示同时满足多个条件;“&”表示“与”;“|”表示“或”;“=>”表示大于等于;“<=”表示小于等于

04

添加变量

有时候,我们对某个变量进行运算后,希望该变量合并到原始的数据中,这就需要一个重要的函数mutate了。

如,我想计算mpg与cyl的比值,并把它们的比值添加到数据的第一列:

dt %>%
  mutate(mpg_cyl = mpg/cyl) %>%
  select(mpg_cyl,everything())

其实我想把它俩的比值(mpg_cyl)添加到第二列:

dt %>%
  mutate(mpg_cyl = mpg/cyl) %>%
  select(names,mpg_cyl,everything())
05

数据汇总

能够看到这里的大概都是真爱了,既然如此,上干货:
1)我想对一个变量求它们的分组平均值:
dt %>%
  mutate(group = ifelse(vs=="0","small","big")) %>% #添加分组
  select(names,group,everything()) %>%
  group_by(group) %>%
  summarize(mpg_mean = mean(mpg,na.rm = TRUE))
#可以考虑一下na.rm的含义是什么?

2)我想对数据中选出的几个变量进行运算,如求和,求平均值等

dt %>%
  mutate(group = ifelse(cyl < 6,"small",
                        ifelse(cyl > 6,"big", "median"))) %>%
  select(group,mpg,cyl,disp) %>%
  reshape2::melt(id="group") %>%
  group_by(group,variable) %>%
  summarize(value_sum = sum(value,na.rm = TRUE)) %>%
  reshape2::dcast(group ~ variable, value.var = "value_sum")

这串代码的意思如下:1)首先我想根据cyl变量的大小把所有的数据分为三个组,分别是小于6的为small组,大于6的为big组,中间的为median组;2)然后因为我想对mpg,cyl和disp这三个变量求和,所以我单独的选出了这三列,因为如果分别对这三个变量求和的话,需要在求和时写三串代码(当然其实也可以,但是如果是100个甚至1w个变量呢?),所以我把宽数据转变为了长数据,这样就变1个分组为2个分组了(分别是group和variable);3)然后我根据这两个分组对目标的3个变量求和,并去除空值(na.rm=TRUE); 4)最后我还是想以宽数据的形式展示,所以我又把长数据转换为了宽数据(具体画图时可以根据自己的需要选择是否转变回来)。

除此之外,summarize还有其它运算,如求方差,中位数,等等。可以使用如下代码查看:

?dplyr::summarize
(0)

相关推荐

  • R学习 从Tidyverse学起,入门R语言(tibble,readr和dplyr)

    R学习往期回顾: R学习:字符串 R学习:环境和函数 R学习:数据框的基本操作 R学习:R for Data Science(五) R学习:R for Data Science(四) R学习:R fo ...

  • R最快且比dplyr最高效的大数据处理R包:tidyfst

    写在前面 本包开发者黄天元: 首先我对tidyfst进行了一套完整的学习,因为这里面的函数并不多,满打满计算,也就38个. 随着扩增子的平稳,我逐渐转入宏基因组,软件更多,平台跨度更大,R语言显示出来 ...

  • 012 Stata:排序与分组

    主要是sort.gsort.bysort三个命令 1.sort 升序 sort varlist [in] [, stable] sysuse auto, clearkeep make price mp ...

  • dplyr::bind_rows整合多个数据框

    欢迎来到医科研,这里是白介素2的读书笔记,跟我一起聊临床与科研的故事, 生物医学数据挖掘,R语言,TCGA.GEO数据挖掘. 高效的整合多个数据框  在base包中可以通过cbind, rbind按行 ...

  • 练习R:dplyr包arrange函数排序

    用r自带的鸢尾花iris数据集为例,我们只要前5行,新的myiris数据如下: 1.单个变量排序 按第1个指标升序 arrange(myiris,myiris[,1]) 按第一个指标的变量名称升序 a ...

  • 【Python基础】安利3个Python数据分析EDA神器!

    来源:Python数据科学 作者:东哥起飞 EDA是数据分析必须的过程,用来查看变量统计特征,可以此为基础尝试做特征工程.东哥这次分享3个EDA神器,其实之前每一个都分享过,这次把这三个工具包汇总到一 ...

  • 给梦想一次插上翅膀的机会

    俗话说七月流火,在东海岛的感觉就是,这话真不是盖的.除开了台风欲来时的暴雨倾盆,剩下的所有日子,都是赤日炎炎的生活.这里海拔最高的地方约有118米,其它地方几乎就跟一马平川的平原一样了. 在开营前两天 ...

  • (原创)公益讲座:课改,需要插上翅膀贴地飞行!

    来自孩子的反馈:老师,听了您的讲座以后,我感触很深,我们现在正在应试教育之下--学习,背书,做题,考试.....学习的趣味性早已不知道飞去了哪里,我所理解的学习不是为了考出高分,而是为了获得知识,充实 ...

  • 搏一搏单车变摩托,给戴尔T1700插上“翅膀”,再战5年

    今年年初的时候公司淘汰下来几台电脑,我挑来挑去发现了一台戴尔的T1700工作站,intel4代i7的U,3.6GHz主频,睿频4GHz,四核心八线程,放到现在相当于一颗十代的i3,这可是好东西啊,足够 ...

  • 如何才能给孩子的思维与想象力插上翅膀呢?

    如何才能给孩子的思维与想象力插上翅膀呢? 孩子语文学不好,作文更是一团糟,笔头咬烂也写不出东西,给孩子看基本作文书,经典句集就行了么?这样只能将孩子的思维进一步模板化.那么我们如何才能给孩子的思维与想 ...

  • 为梦想插上翅膀/张振勇

    扫描或长按二维码 顾问 钟石山  主编 唐志平 投稿邮箱 1019474369@qq.com 为梦想插上翅膀 张振勇 小时候,我知道山外的世界好大,没有长大的自己总想飞出大山,去实现自己那个五彩纷呈的 ...

  • 燕子的叫声,给我的梦想,插上翅膀

    <清浅> 燕子的叫声,给我的梦想,插上翅膀 白昼给我美丽,我用美丽,装扮白昼 清晨的阳光,温暖地抚摸着我的臂膀,我迎着阳光去追求这一天的喜悦. 午后,阳光斜进窗来之后,我拉上窗帘,留下一屋 ...

  • 《作家专栏》总第451期:给美梦插上翅膀|陈鲁豫(黑龙江)

    点击蓝色文字关注我们吧! 文学新高地 时代最强音 弘扬真善美 汇聚正能量 扩版増栏谱新篇 --纸刊<天赋文学>报二期新颜 <天赋文学>报,由天赋文学社主办,<文学时代微刊 ...

  • 为动力插上“翅膀” 试驾新款凯迪拉克XT5/XT6

    谈起凯迪拉克,就不得不提到他们在汽车界创造过无数个第一,美国第一台八缸发动机正是出自凯迪拉克之手还成全了美国汽车行业的标准,此后凯迪拉克相继研发出世界上第一台V12.世界上第一台V16发动机等等.随着 ...

  • 乌兰琪琪格:这一夜,我想插上翅膀(外两首)

    阅读本文前,请点击标题下面蓝色字体"温馨微语""关注"我们.倡导原创,感谢转发,欢迎海内外作者赐稿.版权归原创作者所有.文坛园地,奉献给所有高尚灵魂. 文/乌兰 ...