R语言的dplyr包

1、把列视作变量,第一个需求自然选择哪些列,str_detect(cols,pattern)固然可以,select更便利

# 直接用列名,还不加引号
> dt %>% select(Sepal.Length) %>% head(5)
# A tibble: 5 × 1
  Sepal.Length
         <dbl>
1          5.1
2          4.9
3          4.7
4          4.6
5          5  
# 列名同时与位置绑定,直接按列名取位置区间
> dt %>% select(Sepal.Length:Petal.Length) %>% head(5)
# A tibble: 5 × 3
  Sepal.Length Sepal.Width Petal.Length
         <dbl>       <dbl>        <dbl>
1          5.1         3.5          1.4
2          4.9         3            1.4
3          4.7         3.2          1.3
4          4.6         3.1          1.5
5          5           3.6          1.4
# 前面能用的办法,可以直接取否
> dt %>% select(!Sepal.Length:Petal.Length) %>% head(5)
# A tibble: 5 × 2
  Petal.Width Species
        <dbl> <fct>  
1         0.2 setosa 
2         0.2 setosa 
3         0.2 setosa 
4         0.2 setosa 
5         0.2 setosa 

2、完全匹配自然好用,正则匹配更是牛的一批

> dt %>% select(starts_with("Sepal")) %>% head(5)
# A tibble: 5 × 2
  Sepal.Length Sepal.Width
         <dbl>       <dbl>
1          5.1         3.5
2          4.9         3  
3          4.7         3.2
4          4.6         3.1
5          5           3.6
> dt %>% select(ends_with("Length")) %>% head(5)
# A tibble: 5 × 2
  Sepal.Length Petal.Length
         <dbl>        <dbl>
1          5.1          1.4
2          4.9          1.4
3          4.7          1.3
4          4.6          1.5
5          5            1.4
> dt %>% select(contains("epa")) %>% head(5)
# A tibble: 5 × 2
  Sepal.Length Sepal.Width
         <dbl>       <dbl>
1          5.1         3.5
2          4.9         3  
3          4.7         3.2
4          4.6         3.1
5          5           3.6
# 列名是字母+数字,无论有无规律,都有办法
> gdf <-
+   tibble(g = c(1, 1, 2, 3), v1 = 10:13, v2 = 20:23) 
> gdf %>% select(num_range("v",1:3))
# A tibble: 4 × 2
     v1    v2
  <int> <int>
1    10    20
2    11    21
3    12    22
4    13    23
> gdf %>% select(matches("[a-z][0-9]"))
# A tibble: 4 × 2
     v1    v2
  <int> <int>
1    10    20
2    11    21
3    12    22
4    13    23

3、还可以根据列的数据类型选择

> gdf <-
+   tibble(g = letters[c(1, 1, 2, 3)], v1 = 10:13, v2 = 20:23) 
> gdf %>% select(where(is.character))
# A tibble: 4 × 1
  g    
  <chr>
1 a    
2 a    
3 b    
4 c    
> gdf %>% select(where(is.integer))
# A tibble: 4 × 2
     v1    v2
  <int> <int>
1    10    20
2    11    21
3    12    22
4    13    23

4、可以按照位置选择

# 从左向右选,与向量选法相同
> gdf %>% select(1:2)
# A tibble: 4 × 2
  g        v1
  <chr> <int>
1 a        10
2 a        11
3 b        12
4 c        13
> gdf %>% select(1)
# A tibble: 4 × 1
  g    
  <chr>
1 a    
2 a    
3 b    
4 c    
> gdf %>% select(c(1,3))
# A tibble: 4 × 2
  g        v2
  <chr> <int>
1 a        20
2 a        21
3 b        22
4 c        23
# 从右向左选,可以用last_col但索引是从0开始,每次只能选一列
> gdf %>% select(last_col(0))
# A tibble: 4 × 1
     v2
  <int>
1    20
2    21
3    22
4    23
> gdf %>% select(last_col(2))
# A tibble: 4 × 1
  g    
  <chr>
1 a    
2 a    
3 b    
4 c    
# 作为选择区间的终点选择办法是最妙的
> gdf %>% select(1:last_col(1))
# A tibble: 4 × 2
  g        v1
  <chr> <int>
1 a        10
2 a        11
3 b        12
4 c        13
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值