文章目录
- 一、dplyr包
- [二、新加列 mutate()](#二、新加列 mutate())
- [三、选取列 select()](#三、选取列 select())
- [四、修改列名 rename()](#四、修改列名 rename())
- [五、筛选 filter()](#五、筛选 filter())
- [六、统计汇总 summarise()](#六、统计汇总 summarise())
- [七、分组统计 group_by()](#七、分组统计 group_by())
- [八、排序 arrange()](#八、排序 arrange())
- [九、左联结 left_join()](#九、左联结 left_join())
- [十、右联结 right_join()](#十、右联结 right_join())
- [十一、满联结 full_join()](#十一、满联结 full_join())
一、dplyr包
tidyverse里的数据处理工具包dplyr被誉为"瑞士军刀"。
dplyr主要包含以下10个主要的函数:
- mutate(),select(),rename(),filter()
- summarise(),group_by(),arrange()
- left_join(),right_join(),full_join()
二、新加列 mutate()
c
df
## a b c
## 1 1 3 3
## 2 23 5 8
## 3 3 7 6
## 4 3 5 8
mutate(.data = df, d = c(1,2,3,4))
## a b c d
## 1 1 3 3 1
## 2 23 5 8 2
## 3 3 7 6 3
## 4 3 5 8 4
新加的向量的长度要么与数据框的行数等长,要么长度为1,通过循环机制补齐。
三、选取列 select()
c
df %>% select(a, b)
## a b
## 1 1 3
## 2 23 5
## 3 3 7
## 4 3 5
如果不想要某列,可以在变量前面加 - 或者 !,两者的结果是一样的。
c
df %>% select(-a)
## b c
## 1 3 3
## 2 5 8
## 3 7 6
## 4 5 8
四、修改列名 rename()
格式为 rename(.data, new_name = old_name)
c
df %>%
select(a, b) %>%
rename(bb = b)
## a bb
## 1 1 3
## 2 23 5
## 3 3 7
## 4 3 5
五、筛选 filter()
c
df %>% filter(a == 3)
## a b c
## 1 3 7 6
## 2 3 5 8
六、统计汇总 summarise()
summarise()
函数非常强大,主要用于统计汇总,往往与其他函数配合使用。
c
df %>% summarise(
mean_a = mean(a),
median_b = median(b),
n = n(),
sum_d = sum(d)
)
## mean_a median_b n sum_d
## 1 7.5 5 4 17
summarise()
与 mutate()
一样,也是创建新的变量(新的列)。区别在于,mutate()
是在原数据框的基础上增加新的一列;而summarise()
在成立的新的数据框中创建一列。
七、分组统计 group_by()
summarise()
函数往往配合group_by()
一起使用,即,先分组再统计。
c
df1
## a b c
## 1 s1 3 3
## 2 s2 5 8
## 3 s1 7 6
## 4 s2 5 8
df1 %>%
group_by(a) %>%
summarise(
mean_b = mean(b),
sd_c = sd(c)
)
## # A tibble: 2 × 3
## a mean_b sd_c
## <chr> <dbl> <dbl>
## 1 s1 5 2.12
## 2 s2 5 0
八、排序 arrange()
按照 a 从低到高排序
c
df %>% arrange(a)
## a b c
## 1 1 3 3
## 2 3 7 6
## 3 3 5 8
## 4 23 5 8
默认情况是从小到大排序,如果从高到低降序排序呢,有两种方法,第一种方法是在用于排序的变量前面加 - 号,第二种方法可读性更强些,需要使用desc()
函数。
c
df %>% arrange(-a)
## a b c
## 1 23 5 8
## 2 3 7 6
## 3 3 5 8
## 4 1 3 3
df %>% arrange(desc(a))
## a b c
## 1 23 5 8
## 2 3 7 6
## 3 3 5 8
## 4 1 3 3
九、左联结 left_join()
c
df1
## a b c
## 1 s1 3 3
## 2 s2 5 8
## 3 s1 7 6
## 4 s2 5 8
df2
## a b
## 1 s2 22
## 2 s3 66
# 写法一
left_join(df1, df2, by = "a")
# 写法二
df1 %>% left_join(df2, by = "a")
## a b.x c b.y
## 1 s1 3 3 NA
## 2 s2 5 8 22
## 3 s1 7 6 NA
## 4 s2 5 8 22
十、右联结 right_join()
c
# 写法一
right_join(df1, df2, by = "a")
# 写法二
df1 %>% right_join(df2, by = "a")
## a b.x c b.y
## 1 s2 5 8 22
## 2 s2 5 8 22
## 3 s3 NA NA 66
十一、满联结 full_join()
c
df1 %>% full_join(df2, by = "a")
## a b.x c b.y
## 1 s1 3 3 NA
## 2 s2 5 8 22
## 3 s1 7 6 NA
## 4 s2 5 8 22
## 5 s3 NA NA 66