Mutate 函数:对字符串进行排序并删除重复字符
Mutate function: Sort a character string and remove duplicate characters
我知道这一定很简单,以至于已经有可用的功能,也许在 stringr 中,可以做到这一点......但我没有运气找到答案。
我有一个包含一列的数据框:
> df1 <- tibble(col1=c("abac", "aacabb"))
> df1
# A tibble: 2 x 1
col1
<chr>
1 abac
2 aacabb
并且我想创建两个新列,这样我最终会得到:
> df2
# A tibble: 2 x 3
col1 col2 col3
<chr> <chr> <chr>
1 abac aabc abc
2 aacabb aaabbc abc
其中 col2 的字符按顺序排列,col3 删除了重复的字符。任何提示将不胜感激。谢谢
我们可以使用strsplit
lst1 <- lapply(strsplit(df1$col1, ""), sort)
df1$col2 <- sapply(lst1, function(x) paste(x, collapse=""))
df1$col3 <- sapply(lst1, function(x) paste(unique(x), collapse=""))
或使用tidyverse
library(dplyr)
library(purrr)
library(stringr)
df1 %>%
mutate(tmp = str_extract_all(col1, "."),
col2 = map_chr(tmp, ~ str_c(sort(.x), collapse="")),
col3 = map_chr(tmp, ~ str_c(unique(sort(.x)), collapse="")),
tmp = NULL)
-输出
# A tibble: 2 x 3
# col1 col2 col3
# <chr> <chr> <chr>
#1 abac aabc abc
#2 aacabb aaabbc abc
使用 tidyverse
的类似选项
library(tidyverse)
df <- tibble(col1=c("abac", "aacabb"))
df %>%
mutate(col2 = map_chr(str_split(col1, ""), ~str_c(str_sort(.x), collapse = "")),
col3 = map_chr(str_split(col1, ""), ~str_c(str_sort(unique(.x)), collapse = "")))
#> # A tibble: 2 x 3
#> col1 col2 col3
#> <chr> <chr> <chr>
#> 1 abac aabc abc
#> 2 aacabb aaabbc abc
由 reprex package (v0.3.0)
于 2020-12-14 创建
我知道这一定很简单,以至于已经有可用的功能,也许在 stringr 中,可以做到这一点......但我没有运气找到答案。
我有一个包含一列的数据框:
> df1 <- tibble(col1=c("abac", "aacabb"))
> df1
# A tibble: 2 x 1
col1
<chr>
1 abac
2 aacabb
并且我想创建两个新列,这样我最终会得到:
> df2
# A tibble: 2 x 3
col1 col2 col3
<chr> <chr> <chr>
1 abac aabc abc
2 aacabb aaabbc abc
其中 col2 的字符按顺序排列,col3 删除了重复的字符。任何提示将不胜感激。谢谢
我们可以使用strsplit
lst1 <- lapply(strsplit(df1$col1, ""), sort)
df1$col2 <- sapply(lst1, function(x) paste(x, collapse=""))
df1$col3 <- sapply(lst1, function(x) paste(unique(x), collapse=""))
或使用tidyverse
library(dplyr)
library(purrr)
library(stringr)
df1 %>%
mutate(tmp = str_extract_all(col1, "."),
col2 = map_chr(tmp, ~ str_c(sort(.x), collapse="")),
col3 = map_chr(tmp, ~ str_c(unique(sort(.x)), collapse="")),
tmp = NULL)
-输出
# A tibble: 2 x 3
# col1 col2 col3
# <chr> <chr> <chr>
#1 abac aabc abc
#2 aacabb aaabbc abc
使用 tidyverse
library(tidyverse)
df <- tibble(col1=c("abac", "aacabb"))
df %>%
mutate(col2 = map_chr(str_split(col1, ""), ~str_c(str_sort(.x), collapse = "")),
col3 = map_chr(str_split(col1, ""), ~str_c(str_sort(unique(.x)), collapse = "")))
#> # A tibble: 2 x 3
#> col1 col2 col3
#> <chr> <chr> <chr>
#> 1 abac aabc abc
#> 2 aacabb aaabbc abc
由 reprex package (v0.3.0)
于 2020-12-14 创建