本文档用于第4界大数据传播论坛的 R 语言工作坊的相关说明。
安装 R ,安装 RStudio,安装 Rtools (Windows)或 XQuartz (Mac)。
软件及相关数据见以下链接:
链接:http://pan.baidu.com/s/1geV3FcJ
密码:4i7p
录屏已上传。
install.packages("tidyverse")
安装完成后,加载该包。
library(tidyverse)
- R 中的数据结构
- R 中的数据导入
- R 的基础操作
- 利用 dplyr 包进行数据管理
- 新增变量
- 选择变量
- 筛选观测
- 数据排序
- 随机抽样
- 分组统计
- 管道操作
- 利用 stringr 包进行文本数据分析
- 基本字符串函数
- 正则表达式基础
- 《定量群学》微信公众号的系列推文
- 本人微信朋友圈的系列转载(微信号:nkluxk)
- 详细内容点击此处的 GitHub 库
- 卡巴科夫:《R 语言实战》(2016)。
- 任坤:《R 语言编程指南》(2017)。初学者阅读前7章即可。
- 吕小康:《R 语言统计学基础》(2017)。
- 薛毅:《R 语言实用教程》(2014)。
- Hadley: 《高级 R 语言编程指南》(2016),有英文在线版。初学者阅读1-5章即可。
- Hadley: R for Data Science,国内有纸质影印版《数据科学:R 语言实现》(2017)。
- Bookdwon官网上的若干公开电子书籍。
录屏已上传。将下列代码,拷至 R Script 或 RStudio 中,设定相关的工作目录后,即可察看效果。
# 总体说明:所有文件默认放置于当前工作夹中
# setwd() # 设定工作目录,例如setwd("C:\\xkdog")或setwd("C:/xkdog")
# getwd() # 查看当前工作目录
## Topic 1:修改文件名
# 如何修改文件名:单个文件夹修改
a <- list.files() # 列示文件夹内的文件
b <- paste(2016, a, sep = "-") # 拼接向量 2016 与 a
file.rename(a, b) # 重命名文件
# 如何修改文件名:多个文件夹修改
# 视自身文件夹路径而定,注意文件夹宜全为英文
x <- list.files() # 列示文件夹内的文件
y <- paste(getwd(), x, sep = "") # 拼接当前工作路径与 x
rename = function(a, b)
{
for (i in 1:length(b))
{
setwd(b[i])
c <- list.files()
d <- paste(a[i], c, sep = "-")
file.rename(c, d)
print(list.files())
}
} # 定义重命名函数
rename(x, y) # 利用重命名函数进行重命名
# Topic 2:计算多道选择题的错误率
library(dplyr) # 载入 dplyr 包,以便进行数据框操纵
pci_rate_clean <- read.csv("pci_rate_clean.csv") # 读入数据
pci_rate_clean_TF <- pci_rate_clean == 1 # 取值为1定义为TRUE,否则为FALSE
TF <- function(x) { sum(x) / length(x) } # 定义正确率函数
error_rate_p <- apply(pci_rate_clean_TF, 1, TF) # 求个体正确率,长度同个体数
error_rate_q <- apply(pci_rate_clean_TF, 2, TF) # 求每道题的正确率,长度同题目数
result <- bind_cols(pci_rate_clean,
error_rate_p = error_rate_p) # 把个体正确率并入数据框
TF(result$error_rate_p > 0) # 计算至少做错一道误的个体占总体的比率
# Topic 3:dplyr 与 stringr 文本数据处理
library(readxl) # 载入 readxl 包,以便读入 Excel 文件
library(dplyr) # 载入 dplyr 包,以便进行数据框操纵
library(stringr) # 载入 stringr 包,以便进行字符串操纵
x <- read_excel("PDSurveyBasic.xlsx") # 读入数据
mins <-
str_extract(x$time2, "[:digit:]+") %>% as.numeric # 提取纯数字文本,并转为数值型向量
x_new <- mutate(x, mins = round(mins / 60)) %>%
filter(mins <= 60,
mins >= 10,
relationship > 1,
student > 1) # 生成新变量mins,并将其单位转为分;同时,根据提前设置的规则选定有效被试
round(nrow(x_new) / nrow(x), 2) # 计算有效样本量,并保留两位小数
## 以下用于提取 IP 地址呈现的地理位置信息
ip.location <-
str_extract(x_new$ip, "(?<=\\().*(?=\\))") %>%
str_split("-", n = 2, simplify = TRUE) %>%
as_tibble %>%
transmute(province = .[[1]], city = .[[2]])
## 修改数据框,使之更为清洁
clean.data <-
select(x_new,-ip) %>%
bind_cols(ip.location) %>%
as_tibble
## 按先省份、再城市的方式,以各城市内的有效被试人数进行降序列表
y <-
group_by(ip.location, province, city) %>%
count() %>%
arrange(desc(n))
y