R语言笔记Day1(七 dplyr包)

1、dplyr 基础包

dplyr包函数 函数名称 说明
函数1 filter() 按值筛选观测
函数2 arrange() 对行进行重新排序
函数3 select() 按名称选取列变量
函数4 mutate() 使用现有变量的函数创建新变量
函数5 summarize() 将多个值总结为一个摘要统计量
函数6 group_by() 以上函数与group_by()函数连用
group_by()可以改变函数的作用范围;让其从整个数据集上的操作变为在每个分组上的分别操作 group_by()

1.1 数据准备

  • nycflights13::flights, 2013年从纽约出发的336 776次航班的信息
> install.packages("nycflights13")
> library(dplyr)
> library(nycflights13)
> head(flights)
# A tibble: 6 x 19
   year month   day dep_time sched_dep_time dep_delay arr_time
                           
1  2013     1     1      517            515         2      830
2  2013     1     1      533            529         4      850
3  2013     1     1      542            540         2      923
4  2013     1     1      544            545        -1     1004
5  2013     1     1      554            600        -6      812
6  2013     1     1      554            558        -4      740
# … with 12 more variables: sched_arr_time , arr_delay ,....

2.1 filter()筛选行

  • 格式:filter(.data, ...)
  • .data是数据框;
  • ...:后面可以是一个或多个参数,但必须是逻辑值,从而保证为TRUE的行才保留。
筛选出1月1号的数据
> flights%>% filter(month==1,day==1)
# A tibble: 842 x 19
    year month   day dep_time sched_dep_time dep_delay arr_time
                            
 1  2013     1     1      517            515         2      830
 2  2013     1     1      533            529         4      850
 3  2013     1     1      542            540         2      923
 4  2013     1     1      544            545        -1     1004
 5  2013     1     1      554            600        -6      812
 6  2013     1     1      554            558        -4      740
 7  2013     1     1      555            600        -5      913
 8  2013     1     1      557            600        -3      709
 9  2013     1     1      557            600        -3      838
10  2013     1     1      558            600        -2      753
# … with 832 more rows, and 12 more variables: sched_arr_time ,
  • 比较运算符 >, >=, <, <=, !=, ==

  • 逻辑运算符
    & 表示“与”, | 表示“或”, !表示“非”, xor(x,y) 表示“异或”


2.2 arrange()排列行

  • 格式 arrange(.data, ...)
  • .data:数据框
  • ...:变量名,多个变量名使用逗号隔开; arrange()将根据这些列对数据框进行排序。
> arrange(flights,year,month,day)
# A tibble: 336,776 x 19
    year month   day dep_time sched_dep_time dep_delay arr_time
                            
 1  2013     1     1      517            515         2      830
 2  2013     1     1      533            529         4      850
 3  2013     1     1      542            540         2      923
 4  2013     1     1      544            545        -1     1004
 5  2013     1     1      554            600        -6      812
 6  2013     1     1      554            558        -4      740
 7  2013     1     1      555            600        -5      913
 8  2013     1     1      557            600        -3      709
 9  2013     1     1      557            600        -3      838
10  2013     1     1      558            600        -2      753
# … with 336,766 more rows, and 12 more variables:....
> arrange(flights,desc(arr_delay))#降序排列desc()函数
# A tibble: 336,776 x 19
    year month   day dep_time sched_dep_time dep_delay arr_time
                            
 1  2013     1     9      641            900      1301     1242
 2  2013     6    15     1432           1935      1137     1607
 3  2013     1    10     1121           1635      1126     1239
 4  2013     9    20     1139           1845      1014     1457
 5  2013     7    22      845           1600      1005     1044
 6  2013     4    10     1100           1900       960     1342
 7  2013     3    17     2321            810       911      135
 8  2013     7    22     2257            759       898      121
 9  2013    12     5      756           1700       896     1058
10  2013     5     3     1133           2055       878     1250
# … with 336,766 more rows, and 12 more variables:

2.3 select()选择列

  • select(.data, ...):keeps only the variables you mention
> select(flights,year,month,day)#还可以写成 select(flights,year:day)
# A tibble: 336,776 x 3
    year month   day
     
 1  2013     1     1
 2  2013     1     1
 3  2013     1     1
 4  2013     1     1
 5  2013     1     1
 6  2013     1     1
 7  2013     1     1
 8  2013     1     1
 9  2013     1     1
10  2013     1     1
# … with 336,766 more rows
> select(flights,-(year:day))  #删除列
# A tibble: 336,776 x 16
   dep_time sched_dep_time dep_delay arr_time sched_arr_time arr_delay
                                        
 1      517            515         2      830            819        11
 2      533            529         4      850            830        20
 3      542            540         2      923            850        33
 4      544            545        -1     1004           1022       -18
 5      554            600        -6      812            837       -25
 6      554            558        -4      740            728        12
 7      555            600        -5      913            854        19
 8      557            600        -3      709            723       -14
 9      557            600        -3      838            846        -8
10      558            600        -2      753            745         8
# … with 336,766 more rows, and 10 more variables: carrier ,
  • 小技巧

select()函数可以结合一些辅助函数使用:
1)start_with("abc"): 匹配“abc”开头
2)ends_with(): 匹配“xyz” 结尾的名称
3)contains("ijk"): 匹配包含“ijk”的名称
4)mathces("(.)\1"): 匹配名称中有重复字符的变量;(.)匹配单个字符;\1指定第一个子匹配项, 第二个匹配模式也是(.)。
5)num_range("x",1:3): 匹配x1、x2和x3
6)rename(): 可以对数据框中变量名重命名


2.4 使用mutate添加新变量

  • mutate()总是将新列添加在数据集的最后
> head(mutate(iris,newCol1=iris$Sepal.Length*3))
  Sepal.Length Sepal.Width Petal.Length Petal.Width Species newCol1
1          5.1         3.5          1.4         0.2  setosa    15.3
2          4.9         3.0          1.4         0.2  setosa    14.7
3          4.7         3.2          1.3         0.2  setosa    14.1
4          4.6         3.1          1.5         0.2  setosa    13.8
5          5.0         3.6          1.4         0.2  setosa    15.0
6          5.4         3.9          1.7         0.4  setosa    16.2

2.5 transmute()只保留新变量

> head(transmute(iris,newCol1=iris$Sepal.Length*4))
  newCol1
1    20.4
2    19.6
3    18.8
4    18.4
5    20.0
6    21.6

2.6 summarize()进行分组摘要

>  bySpecies<-group_by(iris,Species)
>  summarize(bySpecies, meanCol=mean(iris$Sepal.Length,na.rm = T))
# A tibble: 3 x 2
  Species    meanCol
          
1 setosa        5.84
2 versicolor    5.84
3 virginica     5.84
#by_day<-group_by(flights,year,month,day)  #flights中year,month,day各水平一一组合
> by_day<-group_by(flights,day)
> summarise(by_day,meanCol2=mean(flights$day))
# A tibble: 31 x 2
     day meanCol2
       
 1     1     15.7
 2     2     15.7
 3     3     15.7
 4     4     15.7
 5     5     15.7
 6     6     15.7
 7     7     15.7
 8     8     15.7
 9     9     15.7
10    10     15.7
# … with 21 more rows
  • 练习6

1. 将iris数据框的前4列gather,然后还原

> install.packages("tidyr")
> library(tidyr)
> x=iris[,1:4]
> y=x %>% gather(lengthwidth,exp,1:4)
> head(y)
   lengthwidth exp
1 Sepal.Length 5.1
2 Sepal.Length 4.9
3 Sepal.Length 4.7
4 Sepal.Length 4.6
5 Sepal.Length 5.0
6 Sepal.Length 5.4

2.将第三列分成两列(以小数点为分隔符)然后合并

> head(iris)
  Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1          5.1         3.5          1.4         0.2  setosa
2          4.9         3.0          1.4         0.2  setosa
3          4.7         3.2          1.3         0.2  setosa
4          4.6         3.1          1.5         0.2  setosa
5          5.0         3.6          1.4         0.2  setosa
6          5.4         3.9          1.7         0.4  setosa
> x1 <- iris %>% separate(Petal.Length,c("zhengshu","xiaoshu"),sep = ".")
Warning message:
Expected 2 pieces. Additional pieces discarded in 137 rows [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, ...]. 
> x1#并没有出现拆分的数字,怎么解决?试一下\\.
    Sepal.Length Sepal.Width zhengshu xiaoshu Petal.Width    Species
1            5.1         3.5                          0.2     setosa
2            4.9         3.0                          0.2     setosa
3            4.7         3.2                          0.2     setosa
4            4.6         3.1                          0.2     setosa
5            5.0         3.6                          0.2     setosa
> x2 <- iris %>% separate(Petal.Length,c("zhengshu","xiaoshu"),sep = "\\.",remove = TRUE)#\\.
> x2#结果中出现NA,怎么解决?
    Sepal.Length Sepal.Width zhengshu xiaoshu Petal.Width    Species
1            5.1         3.5        1       4         0.2     setosa
#...此处省略
21           5.4         3.4        1       7         0.2     setosa
22           5.1         3.7        1       5         0.4     setosa
23           4.6         3.6        1             0.2     setosa
#...此处省略
53           6.9         3.1        4       9         1.5 versicolor
54           5.5         2.3        4             1.3 versicolor
55           6.5         2.8        4       6         1.5 versicolor
#...此处省略
62           5.9         3.0        4       2         1.5 versicolor
63           6.0         2.2        4             1.0 versicolor
64           6.1         2.9        4       7         1.4 versicolor
#这个时候想到缺失值的处理中replace_na()函数
~~~R
> x3 <- replace_na(x2,replace = data.frame(xiaoshu=0))
> x3
    Sepal.Length Sepal.Width zhengshu xiaoshu Petal.Width    Species
1            5.1         3.5        1       4         0.2     setosa
#...此处省略
21           5.4         3.4        1       7         0.2     setosa
22           5.1         3.7        1       5         0.4     setosa
23           4.6         3.6        1       0         0.2     setosa
#...此处省略
53           6.9         3.1        4       9         1.5 versicolor
54           5.5         2.3        4       0         1.3 versicolor
55           6.5         2.8        4       6         1.5 versicolor
#...此处省略
62           5.9         3.0        4       2         1.5 versicolor
63           6.0         2.2        4       0         1.0 versicolor
64           6.1         2.9        4       7         1.4 versicolor

3.加载test1.Rdata,将deg数据框按照pvalue从小到大排序

4. 将两个数据框按照probe_id列连接在一起

merge() 根据某一相同列合并

你可能感兴趣的:(R语言笔记Day1(七 dplyr包))