You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
While updating code to move from separate() to separate_*(), I noticed that the behavior of where the final placement of the column being separated differed between both. While not breaking changes, the behavior is not expected and might cause issues if column selection is based on position.
Proposed Change
I think the easiest non-breaking change would be to add to the documentation mentioning that the position for the column being separated is not preserved.
Example
In separate(), the column remains in the same position when remove=FALSE.
In separate*(), using cols_remove=FALSE places the column after the last column that was seperated.
library(tidyverse)
library(tidyr)
library(reprex)
df<- tibble(x= c('a_b', 'c_d', "e_f", 'g_h', 'i_j'),
x2= c('k_l', 'm_n', "o_p", 'q_r', 'x_y'))
# using separatedf|>
separate(x, into= c('xx1', 'xx2'), sep='_', remove=FALSE)
#> # A tibble: 5 × 4#> x xx1 xx2 x2 #> <chr> <chr> <chr> <chr>#> 1 a_b a b k_l #> 2 c_d c d m_n #> 3 e_f e f o_p #> 4 g_h g h q_r #> 5 i_j i j x_ydf|>
separate(x2, into= c('xx1', 'xx2'), sep='_', remove=FALSE)
#> # A tibble: 5 × 4#> x x2 xx1 xx2 #> <chr> <chr> <chr> <chr>#> 1 a_b k_l k l #> 2 c_d m_n m n #> 3 e_f o_p o p #> 4 g_h q_r q r #> 5 i_j x_y x y# delimdf|>
separate_wider_delim(x2, names= c('xx1', 'xx2'), delim='_', cols_remove=FALSE)
#> # A tibble: 5 × 4#> x xx1 xx2 x2 #> <chr> <chr> <chr> <chr>#> 1 a_b k l k_l #> 2 c_d m n m_n #> 3 e_f o p o_p #> 4 g_h q r q_r #> 5 i_j x y x_y# positiondf|>
separate_wider_position(x2, widths= c(xx1=1, 1, xx2=1), cols_remove=FALSE)
#> # A tibble: 5 × 4#> x xx1 xx2 x2 #> <chr> <chr> <chr> <chr>#> 1 a_b k l k_l #> 2 c_d m n m_n #> 3 e_f o p o_p #> 4 g_h q r q_r #> 5 i_j x y x_y# regexdf|>
separate_wider_regex(x2, patterns= c(xx1=".", "_", xx2="."), cols_remove=FALSE)
#> # A tibble: 5 × 4#> x xx1 xx2 x2 #> <chr> <chr> <chr> <chr>#> 1 a_b k l k_l #> 2 c_d m n m_n #> 3 e_f o p o_p #> 4 g_h q r q_r #> 5 i_j x y x_y
Issue
While updating code to move from
separate()
toseparate_*()
, I noticed that the behavior of where the final placement of the column being separated differed between both. While not breaking changes, the behavior is not expected and might cause issues if column selection is based on position.Proposed Change
I think the easiest non-breaking change would be to add to the documentation mentioning that the position for the column being separated is not preserved.
Example
separate()
, the column remains in the same position whenremove=FALSE
.separate*()
, usingcols_remove=FALSE
places the column after the last column that was seperated.Created on 2025-01-23 with reprex v2.1.0
The text was updated successfully, but these errors were encountered: