separate()
已被 separate_wider_position()
和 separate_wider_delim()
取代,因为这两个函数使两者的用途更加明显,API 更加完善,问题处理也更好。被取代的函数不会消失,但只会收到关键的错误修复。
给定正则表达式或字符位置向量,separate()
将单个字符列转换为多个列。
用法
separate(
data,
col,
into,
sep = "[^[:alnum:]]+",
remove = TRUE,
convert = FALSE,
extra = "warn",
fill = "warn",
...
)
参数
- data
-
一个 DataFrame 。
- col
-
<
tidy-select
> 要展开的列。 - into
-
要创建为字符向量的新变量的名称。使用
NA
省略输出中的变量。 - sep
-
列之间的分隔符。
如果是字符,
sep
被解释为正则表达式。默认值是匹配任何非字母数字值序列的正则表达式。如果是数字,
sep
被解释为要分割的字符位置。正值从字符串最左边的 1 开始;负值从字符串最右侧的 -1 开始。sep
的长度应比into
少 1。 - remove
-
如果
TRUE
,从输出数据帧中删除输入列。 - convert
-
如果
TRUE
,将在新列上运行type.convert()
和as.is = TRUE
。如果组件列是整数、数字或逻辑,这非常有用。注意:这将导致字符串
"NA"
转换为NA
。 - extra
-
如果
sep
是一个字符向量,则它控制当片段太多时会发生什么。共有三个有效选项:-
"warn"
(默认值):发出警告并删除额外的值。 -
"drop"
:删除任何额外的值而不发出警告。 -
"merge"
:最多仅分裂length(into)
次
-
- fill
-
如果
sep
是字符向量,则它控制当没有足够的块时会发生什么。共有三个有效选项:-
"warn"
(默认):发出警告并从右侧填充 -
"right"
:在右侧填充缺失值 -
"left"
:填充左侧缺失值
-
- ...
-
传递给方法的附加参数。
例子
# If you want to split by any non-alphanumeric value (the default):
df <- tibble(x = c(NA, "x.y", "x.z", "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
# If you just want the second variable:
df %>% separate(x, c(NA, "B"))
#> # A tibble: 4 × 1
#> B
#> <chr>
#> 1 NA
#> 2 y
#> 3 z
#> 4 z
# We now recommend separate_wider_delim() instead:
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
df %>% separate_wider_delim(x, ".", names = c(NA, "B"))
#> # A tibble: 4 × 1
#> B
#> <chr>
#> 1 NA
#> 2 y
#> 3 z
#> 4 z
# Controlling uneven splits -------------------------------------------------
# If every row doesn't split into the same number of pieces, use
# the extra and fill arguments to control what happens:
df <- tibble(x = c("x", "x y", "x y z", NA))
df %>% separate(x, c("a", "b"))
#> Warning: Expected 2 pieces. Additional pieces discarded in 1 rows [3].
#> Warning: Expected 2 pieces. Missing pieces filled with `NA` in 1 rows [1].
#> # A tibble: 4 × 2
#> a b
#> <chr> <chr>
#> 1 x NA
#> 2 x y
#> 3 x y
#> 4 NA NA
# The same behaviour as previous, but drops the c without warnings:
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
# Opposite of previous, keeping the c and filling left:
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
# Or you can keep all three:
df %>% separate(x, c("a", "b", "c"))
#> Warning: Expected 3 pieces. Missing pieces filled with `NA` in 2 rows [1, 2].
#> # 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
# To only split a specified number of times use extra = "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
# Controlling column types --------------------------------------------------
# convert = TRUE detects column classes:
df <- tibble(x = c("x:1", "x:2", "y:4", "z", NA))
df %>% separate(x, c("key", "value"), ":") %>% str()
#> Warning: Expected 2 pieces. Missing pieces filled with `NA` in 1 rows [4].
#> tibble [5 × 2] (S3: tbl_df/tbl/data.frame)
#> $ key : chr [1:5] "x" "x" "y" "z" ...
#> $ value: chr [1:5] "1" "2" "4" NA ...
df %>% separate(x, c("key", "value"), ":", convert = TRUE) %>% str()
#> Warning: Expected 2 pieces. Missing pieces filled with `NA` in 1 rows [4].
#> tibble [5 × 2] (S3: tbl_df/tbl/data.frame)
#> $ key : chr [1:5] "x" "x" "y" "z" ...
#> $ value: int [1:5] 1 2 4 NA NA
相关用法
- R tidyr separate_rows 将折叠的列分成多行
- R tidyr separate_longer_delim 将字符串拆分为行
- R tidyr separate_wider_delim 将字符串拆分为列
- R tidyr spread 将键值对分布在多个列上
- R tidyr extract 使用正则表达式组将字符列提取为多列
- R tidyr chop 砍伐和砍伐
- R tidyr pivot_longer_spec 使用规范将数据从宽转为长
- R tidyr unnest_longer 将列表列取消嵌套到行中
- R tidyr uncount “计数” DataFrame
- R tidyr cms_patient_experience 来自医疗保险和医疗补助服务中心的数据
- R tidyr pivot_wider_spec 使用规范将数据从长轴转向宽轴
- R tidyr replace_na 将 NA 替换为指定值
- R tidyr unnest_wider 将列表列取消嵌套到列中
- R tidyr full_seq 在向量中创建完整的值序列
- R tidyr nest 将行嵌套到 DataFrame 的列表列中
- R tidyr pivot_wider 将数据从长轴转向宽轴
- R tidyr nest_legacy Nest() 和 unnest() 的旧版本
- R tidyr gather 将列收集到键值对中
- R tidyr hoist 将值提升到列表列之外
- R tidyr pivot_longer 将数据从宽转为长
- R tidyr pack 打包和拆包
- R tidyr drop_na 删除包含缺失值的行
- R tidyr fill 用上一个或下一个值填充缺失值
- R tidyr tidyr_legacy 旧名称修复
- R tidyr complete 完成缺少数据组合的 DataFrame
注:本文由纯净天空筛选整理自Hadley Wickham等大神的英文原创作品 Separate a character column into multiple columns with a regular expression or numeric locations。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。