学习一个基础函数 separate()以及他的朋友们

函数来自tidyr包,说明文档在tidyr,是一个很高级的基础R包,之前也没有怎么看过。有机会还说多学习一下。

三个函数的家族

separate函数

separate_wider_delim函数

separate_wider_position函数

 功能主要是通过正则表达式,把一列拆分为多列;看看示例:

示例一

把一列拆两列

df <- tibble(x = c(NA, "x.y", "x.z", "y.z"))
> df
# A tibble: 4 × 1
  x    
  <chr>
1 NA   
2 x.y  
3 x.z  
4 y.z  

df %>% separate(x, c("A", "B"))
# A tibble: 4 × 2
  A     B    
  <chr> <chr>
1 NA    NA   
2 x     y    
3 x     z    
4 y     z    

也可以只要两列中的一列

df %>% separate(x, c(NA, "B"))
# A tibble: 4 × 1
  B    
  <chr>
1 NA   
2 y    
3 z    
4 z    

示例二

现在separate函数已经不再维护,推荐使用更明确的两个函数:

separate_wider_delim函数和separate_wider_position函数

可以看到separate_wider_delim指定了分隔符

df %>% separate_wider_delim(x, ".", names = c("A", "B"))
# A tibble: 4 × 2
  A     B    
  <chr> <chr>
1 NA    NA   
2 x     y    
3 x     z    
4 y     z    

不指定分隔符,separate_wider_position函数指定位置也可以达到类似效果

df <- tibble(id = 1:3, x = c("m-123", "f-455", "f-123"))
df %>% separate_wider_position(x, c(gender = 1, 1, unit = 3))
# A tibble: 3 × 3
     id gender unit 
  <int> <chr>  <chr>
1     1 m      123  
2     2 f      455  
3     3 f      123  

示例三

可能会出现不均匀的数据分割,还会有warning

df <- tibble(x = c("x", "x y", "x y z", NA))

df %>% separate(x, c("a", "b"))
# A tibble: 4 × 2
  a     b    
  <chr> <chr>
1 x     NA   
2 x     y    
3 x     y    
4 NA    NA   
Warning messages:
1: Expected 2 pieces. Additional pieces discarded in 1 rows [3]. 
2: Expected 2 pieces. Missing pieces filled with `NA` in 1 rows [1]. 

可以扔了多余的,且不出现warning

df %>% separate(x, c("a", "b"), extra = "drop", fill = "right")
# A tibble: 4 × 2
  a     b    
  <chr> <chr>
1 x     NA   
2 x     y    
3 x     y    
4 NA    NA   

也可以保留最左侧多出来的部分

df %>% separate(x, c("a", "b"), extra = "merge", fill = "left")
# A tibble: 4 × 2
  a     b    
  <chr> <chr>
1 NA    x    
2 x     y    
3 x     y z  
4 NA    NA   

当然也可以把三个都拆分了

df %>% separate(x, c("a", "b", "c"))
# A tibble: 4 × 3
  a     b     c    
  <chr> <chr> <chr>
1 x     NA    NA   
2 x     y     NA   
3 x     y     z    
4 NA    NA    NA   
Warning message:
Expected 3 pieces. Missing pieces filled with `NA` in 2 rows [1, 2]. 

示例四

想要根据冒号分割,但是冒号出现了两次,通过merge参数使得后面的字符串可以保留

df <- tibble(x = c("x: 123", "y: error: 7"))
> df %>% separate(x, c("key", "value"), ": ", extra = "merge")
# A tibble: 2 × 2
  key   value   
  <chr> <chr>   
1 x     123     
2 y     error: 7

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

18kkk

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值