[英]Removing and splitting and reordering of characters in R
我有一个包含这些值列的数据框。 我想将它们拆分为向量并根据内部值根据星期一->星期日重新排列它们。 有没有办法做到这一点? 我尝试使用 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]")
一个基本的 R 解决方案 -
您可以创建所需顺序的向量。 从字符串中删除[]
,用逗号分割数据,使用order
和match
获得正确的顺序,将字符串paste
回去。
如果共享的向量被称为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"
如果您需要[]
返回 -
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]"
这是另一种方法:
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
数据:
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]")
另一种方法:
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
由reprex 包于 2022-07-09 创建 (v2.0.1)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.