[英]Removing and splitting and reordering of characters in R
I have a data frame with columns of these values.我有一个包含这些值列的数据框。 I want to split them into vectors and rearrange them according to Monday -> Sunday based on the values inside.我想将它们拆分为向量并根据内部值根据星期一->星期日重新排列它们。 Is there a way to do it?有没有办法做到这一点? I tried using str_split (column_name,",") but it doesn't split the string.我尝试使用 str_split (column_name,",") 但它不会拆分字符串。
c("[Monday,Tuesday,Wednesday,Thursday,Friday]", "[Monday,Tuesday,Wednesday,Thursday,Friday]",
"[Monday,Tuesday,Wednesday,Thursday,Friday]", "[Monday,Tuesday,Wednesday,Thursday,Friday]",
"[Monday,Tuesday,Wednesday,Thursday,Friday]", "[Monday,Sunday,Thursday,Tuesday,Saturday]",
"[Monday,Tuesday,Wednesday,Thursday,Friday]", "[Monday,Tuesday,Wednesday,Thursday,Friday]",
"[Monday,Tuesday,Wednesday,Thursday,Friday]", "[Monday,Tuesday,Wednesday,Thursday,Friday]",
"[Monday,Tuesday,Wednesday,Thursday,Friday]", "[Monday,Tuesday,Wednesday,Thursday,Friday]",
"[Monday,Tuesday,Wednesday,Thursday,Friday]", "[Monday,Tuesday,Wednesday,Thursday,Friday]",
"[Saturday,Monday,Thursday,Tuesday,Friday]")
A base R solution -一个基本的 R 解决方案 -
You can create a vector of the order that you want.您可以创建所需顺序的向量。 Remove []
from the string, split the data on comma, use order
and match
to get correct order, paste
the string back.从字符串中删除[]
,用逗号分割数据,使用order
和match
获得正确的顺序,将字符串paste
回去。
If the vector shared is called x
you can do -如果共享的向量被称为x
你可以做 -
correct_order <- c('Monday', 'Tuesday', 'Wednesday', 'Thursday',
'Friday', 'Saturday', 'Sunday')
sapply(strsplit(gsub('\\[|\\]', '', x), ','), function(y) {
paste(y[order(match(y,correct_order))], collapse = ',')
})
# [1] "Monday,Tuesday,Wednesday,Thursday,Friday"
# [2] "Monday,Tuesday,Wednesday,Thursday,Friday"
# [3] "Monday,Tuesday,Wednesday,Thursday,Friday"
# [4] "Monday,Tuesday,Wednesday,Thursday,Friday"
# [5] "Monday,Tuesday,Wednesday,Thursday,Friday"
# [6] "Monday,Tuesday,Thursday,Saturday,Sunday"
# [7] "Monday,Tuesday,Wednesday,Thursday,Friday"
# [8] "Monday,Tuesday,Wednesday,Thursday,Friday"
# [9] "Monday,Tuesday,Wednesday,Thursday,Friday"
#[10] "Monday,Tuesday,Wednesday,Thursday,Friday"
#[11] "Monday,Tuesday,Wednesday,Thursday,Friday"
#[12] "Monday,Tuesday,Wednesday,Thursday,Friday"
#[13] "Monday,Tuesday,Wednesday,Thursday,Friday"
#[14] "Monday,Tuesday,Wednesday,Thursday,Friday"
#[15] "Monday,Tuesday,Thursday,Friday,Saturday"
If you need []
back -如果您需要[]
返回 -
result <- sapply(strsplit(gsub('\\[|\\]', '', x), ','), function(y) {
paste(y[order(match(y,correct_order))], collapse = ',')
})
result <- sprintf('[%s]', result)
result
# [1] "[Monday,Tuesday,Wednesday,Thursday,Friday]"
# [2] "[Monday,Tuesday,Wednesday,Thursday,Friday]"
# [3] "[Monday,Tuesday,Wednesday,Thursday,Friday]"
# [4] "[Monday,Tuesday,Wednesday,Thursday,Friday]"
# [5] "[Monday,Tuesday,Wednesday,Thursday,Friday]"
# [6] "[Monday,Tuesday,Thursday,Saturday,Sunday]"
# [7] "[Monday,Tuesday,Wednesday,Thursday,Friday]"
# [8] "[Monday,Tuesday,Wednesday,Thursday,Friday]"
# [9] "[Monday,Tuesday,Wednesday,Thursday,Friday]"
#[10] "[Monday,Tuesday,Wednesday,Thursday,Friday]"
#[11] "[Monday,Tuesday,Wednesday,Thursday,Friday]"
#[12] "[Monday,Tuesday,Wednesday,Thursday,Friday]"
#[13] "[Monday,Tuesday,Wednesday,Thursday,Friday]"
#[14] "[Monday,Tuesday,Wednesday,Thursday,Friday]"
#[15] "[Monday,Tuesday,Thursday,Friday,Saturday]"
Here is an alternative approach:这是另一种方法:
library(tidyverse)
as_tibble(x) %>%
mutate(row = row_number()) %>%
separate_rows("value") %>%
filter(value != "") %>%
mutate(value = fct_relevel(value, c('Monday', 'Tuesday', 'Wednesday', 'Thursday',
'Friday', 'Saturday', 'Sunday')
)) %>%
group_by(row) %>%
arrange(value, .by_group = TRUE) %>%
summarise(new_col = toString(value)) %>%
select(-row)
new_col
<chr>
1 Monday, Tuesday, Wednesday, Thursday, Friday
2 Monday, Tuesday, Wednesday, Thursday, Friday
3 Monday, Tuesday, Wednesday, Thursday, Friday
4 Monday, Tuesday, Wednesday, Thursday, Friday
5 Monday, Tuesday, Wednesday, Thursday, Friday
6 Monday, Tuesday, Thursday, Saturday, Sunday
7 Monday, Tuesday, Wednesday, Thursday, Friday
8 Monday, Tuesday, Wednesday, Thursday, Friday
9 Monday, Tuesday, Wednesday, Thursday, Friday
10 Monday, Tuesday, Wednesday, Thursday, Friday
11 Monday, Tuesday, Wednesday, Thursday, Friday
12 Monday, Tuesday, Wednesday, Thursday, Friday
13 Monday, Tuesday, Wednesday, Thursday, Friday
14 Monday, Tuesday, Wednesday, Thursday, Friday
15 Monday, Tuesday, Thursday, Friday, Saturday
data:数据:
c("[Monday,Tuesday,Wednesday,Thursday,Friday]", "[Monday,Tuesday,Wednesday,Thursday,Friday]",
"[Monday,Tuesday,Wednesday,Thursday,Friday]", "[Monday,Tuesday,Wednesday,Thursday,Friday]",
"[Monday,Tuesday,Wednesday,Thursday,Friday]", "[Monday,Sunday,Thursday,Tuesday,Saturday]",
"[Monday,Tuesday,Wednesday,Thursday,Friday]", "[Monday,Tuesday,Wednesday,Thursday,Friday]",
"[Monday,Tuesday,Wednesday,Thursday,Friday]", "[Monday,Tuesday,Wednesday,Thursday,Friday]",
"[Monday,Tuesday,Wednesday,Thursday,Friday]", "[Monday,Tuesday,Wednesday,Thursday,Friday]",
"[Monday,Tuesday,Wednesday,Thursday,Friday]", "[Monday,Tuesday,Wednesday,Thursday,Friday]",
"[Saturday,Monday,Thursday,Tuesday,Friday]")
Another approach:另一种方法:
library(tidyverse)
days <-
c(
"[Monday,Tuesday,Wednesday,Thursday,Friday]",
"[Monday,Tuesday,Wednesday,Thursday,Friday]",
"[Monday,Tuesday,Wednesday,Thursday,Friday]",
"[Monday,Tuesday,Wednesday,Thursday,Friday]",
"[Monday,Tuesday,Wednesday,Thursday,Friday]",
"[Monday,Sunday,Thursday,Tuesday,Saturday]",
"[Monday,Tuesday,Wednesday,Thursday,Friday]",
"[Monday,Tuesday,Wednesday,Thursday,Friday]",
"[Monday,Tuesday,Wednesday,Thursday,Friday]",
"[Monday,Tuesday,Wednesday,Thursday,Friday]",
"[Monday,Tuesday,Wednesday,Thursday,Friday]",
"[Monday,Tuesday,Wednesday,Thursday,Friday]",
"[Monday,Tuesday,Wednesday,Thursday,Friday]",
"[Monday,Tuesday,Wednesday,Thursday,Friday]",
"[Saturday,Monday,Thursday,Tuesday,Friday]"
)
dat <- tibble(days)
days_order <- c('Monday', 'Tuesday', 'Wednesday', 'Thursday',
'Friday', 'Saturday', 'Sunday')
dat %>%
mutate(
days = str_remove_all(days, "\\[|\\]") %>%
str_split(",") %>%
map(.f = ~ paste0(sort(ordered(.x, days_order)), collapse = ",")) %>%
flatten_chr()
)
#> # A tibble: 15 × 1
#> days
#> <chr>
#> 1 Monday,Tuesday,Wednesday,Thursday,Friday
#> 2 Monday,Tuesday,Wednesday,Thursday,Friday
#> 3 Monday,Tuesday,Wednesday,Thursday,Friday
#> 4 Monday,Tuesday,Wednesday,Thursday,Friday
#> 5 Monday,Tuesday,Wednesday,Thursday,Friday
#> 6 Monday,Tuesday,Thursday,Saturday,Sunday
#> 7 Monday,Tuesday,Wednesday,Thursday,Friday
#> 8 Monday,Tuesday,Wednesday,Thursday,Friday
#> 9 Monday,Tuesday,Wednesday,Thursday,Friday
#> 10 Monday,Tuesday,Wednesday,Thursday,Friday
#> 11 Monday,Tuesday,Wednesday,Thursday,Friday
#> 12 Monday,Tuesday,Wednesday,Thursday,Friday
#> 13 Monday,Tuesday,Wednesday,Thursday,Friday
#> 14 Monday,Tuesday,Wednesday,Thursday,Friday
#> 15 Monday,Tuesday,Thursday,Friday,Saturday
Created on 2022-07-09 by the reprex package (v2.0.1)由reprex 包于 2022-07-09 创建 (v2.0.1)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.