dplyr – 此网站最详细解析
它提供了一些出色的、易于使用的功能,在执行探索性数据分析和操作时非常方便。在这里,我将提供包中包含的一些最有用的函数的基本概述。
在本文中,我们使用 1973 年 5 月至 1973 年 9 月纽约空气质量测量信息的数据集 。airquality``datasets``airquality
数据集头部如下示例:
head(airquality)
Ozone Solar.R Wind Temp Month Day
1 41 190 7.4 67 5 1
2 36 118 8.0 72 5 2
3 12 149 12.6 74 5 3
4 18 313 11.5 62 5 4
5 NA NA 14.3 56 5 5
6 28 NA 14.9 66 5 6
首先,我门加载两个包:
library(datasets)
library(dplyr)
filter
筛选器函数将返回满足以下条件的所有行。例如:筛选Wind<8
的行;筛选Wind>=8
并且Temp<80
的所有行
filter(airquality, Wind < 8)
Ozone Solar.R Wind Temp Month Day
Ozone Solar.R Wind Temp Month Day
1 41 190 7.4 67 5 1
2 7 NA 6.9 74 5 11
3 115 223 5.7 79 5 30
4 37 279 7.4 76 5 31
5 NA 273 6.9 87 6 8
6 NA 150 6.3 77 6 21
...
filter(airquality, Wind >= 8 & Temp < 80)
Ozone Solar.R Wind Temp Month Day
1 36 118 8.0 72 5 2
2 12 149 12.6 74 5 3
3 18 313 11.5 62 5 4
4 NA NA 14.3 56 5 5
5 28 NA 14.9 66 5 6
6 23 299 8.6 65 5 7
...
select
选择特定的列, 例如我门要选取Wind, Temp, Month这三列
select(airquality, Wind, Temp, Month)
Wind Temp Month
1 7.4 67 5
2 8.0 72 5
3 12.6 74 5
4 11.5 62 5
5 14.3 56 5
6 14.9 66 5
...
mutate
mutate用于向数据添加新变量。示例实现了添加一列为Temp除以2;另一列为Temp除以2的平方
airqulity_test <- mutate(
airquality,
T_test = Temp/2,
T_sqrt = sqrt(T_test)
)
head(airqulity_test)
Ozone Solar.R Wind Temp Month Day T_test T_sqrt
1 41 190 7.4 67 5 1 33.5 5.787918
2 36 118 8.0 72 5 2 36.0 6.000000
3 12 149 12.6 74 5 3 37.0 6.082763
4 18 313 11.5 62 5 4 31.0 5.567764
5 NA NA 14.3 56 5 5 28.0 5.291503
6 28 NA 14.9 66 5 6 33.0 5.744563
....
summarise
summarise函数用于将多个值汇总为单个值。当与包中的其他功能结合使用时,它非常强大,如下所示。 在计算平均值时删除所有值,以便它不会产生虚假结果。na.rm = TRUE
summarise(airquality, mean(Wind, na.rm = TRUE))
mean(Wind, na.rm = TRUE)
1 9.957516
ifelse
实现离散变量的功能,示例对于Temp进行了分割,当Temp>90为H,L Temp>=50为M, Tmmp>75为L
airquality$Temp_ <- ifelse(
airquality$Temp > 90, "H",
ifelse(
airquality$Temp>=50 & airquality$Temp <= 75, "M", "L"
)
)
Ozone Solar.R Wind Temp Month Day Temp_
1 41 190 7.4 67 5 1 M
2 36 118 8.0 72 5 2 M
3 12 149 12.6 74 5 3 M
4 18 313 11.5 62 5 4 M
5 NA NA 14.3 56 5 5 M
6 28 NA 14.9 66 5 6 M
...
group_by
用于实现分类汇总的函数,示例将根据Temp_将数据组合在一起,然后使用汇总函数计算每个月的平均温度。group_by
summarise(group_by(airquality, Temp_), mean(Temp, na.rm = TRUE))
Temp_ `mean(Temp, na.rm = TRUE)`
<chr> <dbl>
1 H 93
2 L 81.8
3 M 67.2
sample
示例函数用于从表中选择随机行。第一行代码从数据集中随机选择十行,第二行代码从数据集中随机选择 15 行(原始 153 行的 10%)。
sample_n(airquality, size = 10)
sample_frac(airquality, size = 0.1)
count
计数函数基于组对观测值进行计数。它与基包中的表函数略有不同。例如:
count(airquality, Month)
Month n
1 5 31
2 6 30
3 7 31
4 8 31
5 9 30
pipe
R 中的管道运算符可用于将代码链接在一起。当您对数据执行多个操作,并且不希望在每个中间步骤中保存输出时,它非常有用。%>%
示例为过滤6月的数据,然后选取Wind, Temp, Month三列,对月份进行分组,统计每个月的Temp均值
airquality %>%
filter(Month != 6) %>%
select(Wind, Temp, Month) %>%
group_by(Month) %>%
summarise(mean(Temp, na.rm = TRUE))
Month `mean(Temp, na.rm = TRUE)`
<int> <dbl>
1 5 65.5
2 7 83.9
3 8 84.0
4 9 76.9
...
随着数据分析的深入,%>%
将能够大大简化代码量,使思路清晰
join
数据合并操作,示例为新建两个dataframe
, 然后根据id
来进行连接示例
TableA = data.frame(
id=c(1, 2, 4),
name = c("t1", "t2", "t4")
)
TableB = data.frame(
id=c(1, 2, 3),
age = c(18, 20 , 22)
)
inner_join(TableA, TableB, by="id") # 内连接
left_join(TableA, TableB, by="id") # 左连接
right_join(TableA, TableB, by="id") # 右连接
full_join(TableA, TableB, by="id") # 全连接
如果你有问题,请随时发表评论。
码字不易,如果你觉得有用,请帮忙点个赞或者关注。