R之dplyr -- 此网站最详细解析

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") # 全连接

如果你有问题,请随时发表评论。
码字不易,如果你觉得有用,请帮忙点个赞或者关注。

发布了3 篇原创文章 · 获赞 6 · 访问量 2836

猜你喜欢

转载自blog.csdn.net/weixin_43897615/article/details/105160502