R语言学习资源总结

Communication Concept & History Data Acquisition Machine Learning Onlinebook Program Tidyverse Website Visualization Basic Collection Common Plots Extension Map Modification Theory Communication Starting a Rmarkdown Blog with Blogdown + Hugo + Github (181110) 看了好几篇介绍用blogdown搭建博客的文章,只有这一篇文章介绍的方法让我成功了。 Adding GIF animations (190228; 190311) 介绍了在blogdown中添加动图和生成动图的方法。 Create Multiple Reports with RMarkdown (181129; 190311) 使用Rmarkdown批量生成报告的教程,测试有效,非常实用。 MANY REPORTS FROM 1 RMARKDOWN FILE (190311) 另一篇使用Rmarkdown批量生成报告的教程,没有实际测试,但应该没问题。 Happy collaboration with Rmd to docx (181110)

Continue reading

人对事物的认识大概可以分为三个层次,从“未知的未知”到“已知的未知”再到“已知的已知”。如果确实是这样的话,那学习就可以分为两种,一种是把“未知的未知”变为“已知的未知”,如了解到这个世界上存在一种叫做“负数”的东西,但不知道它究竟指什么;另一种是把“已知的未知”变为“已知的已知”,如通过进一步的了解,获知“负数”的确切意义。德尔菲的神谕认为没有人比苏格拉底更聪明,其看重的可能并不在于苏格拉底是否比其他所有人拥有更多“已知的已知”,而是看到他比其他人拥有更多“已知的未知”。我不知道两种学习中哪一种更为重要,但我觉得,在大多数情况下,前一种学习都是后一种学习的先决条件。人的时间是有限的,没法把所有的知识都掌握,所以比较好的学习思路可能是先去获取足够多的“已知的未知”,再决定把哪些“已知的未知”转变为“已知的已知”。 我接触R已经三年多了,但真正开始学习R,也就一年多的样子。我对R本身其实没有多大的兴趣,但当我把tidyverse变为“已知的未知”时,才对这门语言产生了热情。翻开哲学的入门书,很有可能会发现最开始的章节是以苏格拉底来划分的,如类似“前苏格拉底时代的哲学家们”的说法。在这里,我也想用tidyverse这个词来对我的笔记章节进行划分(当然,tidyverse对应的哲学家更有可能是笛卡尔),具体来说,包括tidyverse之前,用来介绍R的一些基本知识;tidyverse之内,用来介绍tidyverse核心包的使用方法;tidyverse之上,用来介绍建立在tidyverse核心包基础上的一些实用的包;tidyverse之外,用来介绍与tidyverse无关,但很有用的一些包。当然,这些内容中的很大一部分对我来说还是“已知的未知”。 想弄这么个东西,目的主要有两个:一方面,把自己会的东西以教程的形式写出来,能让自己把“已知的已知”掌握得更牢固;另一方面,也能督促自己不断地去学习新知识,探索“未知的未知”,转化“已知的未知”。因此,内容方面,就包括我目前会的,和我将来想学的,具体内容可以看后面暂定的大纲。另外,我也给自己设定了几个要求: 术语尽量给出参考资料和对应的英文,不知道该如何翻译的直接用英文,符号给出对应的英文及其读音; 尽量保证所有的内容都能跟上R本体和所涉及的包的更新; 暂定的提纲如下: tidyverse之前 R的介绍及安装 R的基本概念及操作 R中的条件与循环 tidyveRse之内 使用readr导入数据 使用rvest获取网络数据 dbplyr与数据库 dplyr包常用操作及管道操作符 tidyr包常用操作及tidy data stringr包常用操作及正则表达式 forcats常用操作 lubridate常用操作 purrr包探索 组合使用 tidyverse代码风格 ggplot2基本统计图的绘制 ggplot2统计图的调整 ggplot2统计图的美化 tidyverse之上 使用tidytext进行文本分析 使用ggvis绘制交互统计图 使用gganimate绘制动态统计图 tidyverse之外 使用rmarkdown撰写报告 使用blogdown搭建博客 使用shiny制作网络应用

Continue reading

R的基本概念和操作

R的基本操作 a.计算 b.逻辑运算 c.赋值 R的基本概念 a.数据结构 数据探索 b.函数 c.包 190424 R的基本操作 a.计算 R可以作为计算器使用,+、-、*、/、^分别代表加减乘除和乘方: 2 ^ 2 / 2 - (2 * 2 + 2) ## [1] -4 %%求余数,%/%求商: 5 %% 2 ## [1] 1 5 %/% 2 ## [1] 2 b.逻辑运算 ==、!=、>、>=、<、<=分别用来判断相等、不等、大于、大于等于、小于、小于等于的关系,符合逻辑返回TRUE,反之返回FALSE。对于部分字符(英文字母和汉字),似乎是字母顺序排在后面的更大;对于字符型数值,似乎与其数值型数值相等;另外,逻辑型数值中,TRUE等于1,而FALSE等于0: TRUE == 1 ## [1] TRUE FALSE == 0 ## [1] TRUE '白马' != '马' ## [1] TRUE 1 == '1' ## [1] TRUE 'x' < 'y' ## [1] TRUE '一' > '二' ## [1] TRUE c.

Continue reading

使用R语言模拟抢红包

有一次参加了一个特别无聊的讲座,实在是无事可做,就琢磨了一下像微信抢红包那样的机制是如何实现的。自己当时想了一个模拟的方式,出来的结果似乎也可以以假乱真。后来把相关的代码完善了下,用来在自己组织的R语言课上讲for循环和自编函数。现在把这些内容整理出来,权当作一篇小小的教程。 首先假设,有人发了一个200块钱的红包,分给10个人抢: money <- 200 people <- 10 给每个人安排一个随机数: set.seed(181209) rand_number <- sample(1:10000, people, replace = TRUE) rand_number ## [1] 4188 591 2386 4520 3692 979 8170 3728 7121 4408 随后用每个随机数除以所有随机数的总和得到一个比值,乘以总钱数,进而得到每个人的钱数: rand_money <- rand_number/sum(rand_number)*money rand_money ## [1] 21.054219 2.971118 11.995073 22.723274 18.560692 4.921700 41.072820 ## [8] 18.741674 35.799211 22.160219 然后就可以知道具体每个人得到多少钱了: paste0(paste0(sample(letters, 5, replace = TRUE), collapse = ''), '得到了', round(rand_money[1], 2), '元,红包剩余', round(money - sum(rand_money[1:1]), 2), '元。') ## [1] "hdprm得到了21.

Continue reading

Bar Plot Box Plot Heatmap Histgram Line Chart Map Pie Chart Radar Chart Scatter Plot Treemap 像这样的教程应该有很多了,但为了自己查阅起来方便,我决定自己也写一个。这里我会尽量多的用到各种theme和palette,省得每次绘图还要一个一个试,看哪个好看(通过这个过程,我可能体验到了女生出门前挑衣服的感觉)。 先把需要用到的包载入: library(tidyverse) library(ggthemes) Bar Plot 直条图应该是最常见的了,在心理学论文中用到直条图时,一般都是把自变量放到x轴上,因变量放到y轴上,然后再添加误差条: iris %>% group_by(Species) %>% summarise(avg_sl = mean(Sepal.Length), se = sqrt(sd(Sepal.Length)/n())) %>% ggplot(aes(Species, avg_sl, fill = Species)) + geom_col(width = .5) + geom_errorbar(aes(ymin = avg_sl - se, ymax = avg_sl + se),width = .3) + scale_y_continuous(expand = c(0, 0)) + scale_fill_brewer(palette = 'Set2') + labs(y = 'Sepal.

Continue reading

大概是去年的这个时间,我在一个名叫Data Is Beautiful的reddit论坛上看到了一张Rick and Morty的分集评分热力图,就想用R把它重复出来。当时水平还不怎么样,只能画个大概出来,很多细节都不知道该如何呈现;前几个月,又重新尝试了下,大部分细节都知道该如何实现了,但还是差一点;这里再尝试一下,看看能不能完全重复出来,毕竟这张图应该就是用R画的。 图是这样的: 首先,还是先把需要用到的包载入: library(tidyverse) 然后载入数据: rm <- read_csv("rick & morty.csv") %>% mutate_at(vars(Episode, Season), as.factor) 载入数据的时候,为方便后面的绘图,顺便把集数和季数两个变量改成了因子型。具体的数据是这样的: rm ## # A tibble: 31 x 3 ## Episode Season Rating ## <fct> <fct> <dbl> ## 1 1 1 8.1 ## 2 2 1 8.7 ## 3 3 1 8.4 ## 4 4 1 8.6 ## 5 5 1 8.9 ## 6 6 1 9 ## 7 7 1 8.

Continue reading

Author's picture

孟祥良

R语言爱好者, 心理学专业硕士 & FGO休闲玩家