学习数据框格式的表格操作技巧
小插曲:加载dplyr包时,部分依赖包加载失败。提示说需要更新,但总是更新失败,网上查了后,去文件夹把该包彻底删除后,重新安装就好了。
library(dplyr)
library(nycflights13)
操作数据示例
一、筛选指定行
-
filter()
函数
注意基础函数也有一个filter函数,所以一定要先加载dplyr包。 - 函数参数主要包括两部分:原数据框,筛选条件(可多个)
见下列示例就很容易明白
filter(flights, month == 1)
filter(flights, month == 1, day == 1)
1、常用比较符
>
、 >=
、 <
、 <=
!=
==
2、逻辑运算符
常用于变量的多范围选择
&
或
|
与
filter(flights, month == 11 | month == 12)
#选取11与12月的数据,用的是&或比较符
- 值得注意的是不能写成
filter(flights, month == 11 | 12)
。 - 简写的形式可以是
%in%
,如下例
filter(flights, month %in% c(11, 12)) #等同上例
二、表格排序
表格排序一般指的是行排序
-
arrange()
函数 - 一般也是两个参数:数据框,列名
(1)默认为升序排序,desc()
可设置为降序排列
arrange(flights, desc(arr_delay))
(2)当参数有多个列名时,使后面的列在前面排序的基础上继续排序。生动的例子就是年、月、日。可以脑补下两年、每年12个月、每月30天的三列排序
arrange(flights, year, month, day)
NA值无论在升序,还是降序排列中都是排在最后。
三、选取指定列
-
select()
函数 - 参数同样是数据框、列名
select(flights, year, month, day)
select(flights, year:day)
select(flights, -year:day) #反选
此外也支持正则表达式,之后的章节会学到
用法引申:将数据框中的指定列放在前列
names(flights)
test <- select(flights, month, day, everything())
names(test)
四、更改列名
rename(flights, days = day)
#等号前面为新名,后面为原名
五、添加变量
-
mutate()
函数
flights_sml <- select(flights,distance, air_time)
mutate(flights_sml, speed = distance / air_time * 60)
#在flights_sml中增加speed列
#transmute()函数可将新增列独立出来
transmute(flights_sml,speed = distance / air_time * 60)
- 常用的创建运算符函数有 +-*/^
%/% (整数除法)和 %% (求余)
对数函数: log() 、 log2() 和 log10()
六、分组统计
-
summarize()
统计函数,常搭配group_by()
分组函数使用
如下代码,需要先设置中间的分组数据(month),再进行目标分组统计(dep_delay)均值
by_month <- group_by(flights,month)
summarize(by_month, dep = mean(dep_delay, na.rm = TRUE))
6-1
1、管道通道符
如上进行分组统计时,要先确立一个分组中间数据,然后再进行分组统计;可以使用%>%
通道符一步到位。示例见下
flights %>%
group_by(month) %>%
summarize(delay = mean(dep_delay, na.rm = TRUE))
如上,一般依次分别交代原数据、分组变量、统计变量及方法。再如下一个较复杂的例子
delays <- flights %>%
group_by(dest) %>%
summarize(
count = n(), #对每组计数
#count = sum(!is_na()) #对非缺失值计数
dist = mean(distance, na.rm = TRUE),
delay = mean(arr_delay, na.rm = TRUE)
) %>%
filter(count > 20, dest != "HNL")
6-2
2、常用统计方法
-
mean()
、median()
- 方差
sd()
、 四分位距IQR()
、绝对中位差mad()
-
min()
、quantile(x, 0.25)
、max()
- 唯一值数
n_distinct()
- 逻辑值的计数和比例:
sum(x > 10)
和mean(y == 0)
,由于针对每个观测值会分为TRUE与FALSE,因此分别为求计数与比例。
绝对中位差:用原数据减去中位数后得到的新数据的绝对值的中位数。常用来估计标准差,估计标准差=1.4826*绝对中位差。
网友评论