gpt4 book ai didi

r - 如何在 R 中交换部分字符串?

转载 作者:行者123 更新时间:2023-12-05 02:31:24 25 4
gpt4 key购买 nike

我有一个包含一列字符的数据框。我正在尝试交换字符的顺序。例如,如果我有一个如下所示的数据框:

df <- data.frame(
vars = c('Sepal.Width:Petal.Length' ,
'Sepal.Length:Sepal.Length',
'Sepal.Length:Petal.Length',
'Petal.Length:Sepal.Length',
'Petal.Width:Sepal.Length ',
'Sepal.Length:Petal.Width ',
'Petal.Width:Petal.Length ',
'Sepal.Width:Sepal.Width ',
'Sepal.Width:Sepal.Length '),
value = c(0.18750000,
0.12500000,
0.18750000,
0.09791667,
0.09791667,
0.06666667,
0.02500000,
0.05625000,
0.15625000)
)

我们可以在 var 列中看到第 3 行是 Sepal.Length:Petal.Length,第 4 行是 Petal.Length:Sepal.Length。我要做的是安排数据框,使名称的顺序相同。因此,对于第 3 行和第 4 行,我想重新排列名称,比如说,按字母顺序排列,以便我们得到:Petal.Length:Sepal.Length 两行。

重新排列完整的数据框后,我想要的输出看起来像这样:

                        var      value
1 Petal.Length:PetalWidth. 0.02500000
2 Petal.Length:Sepal.Length 0.09791667
3 Petal.Length:Sepal.length 0.18750000
4 Petal.Length:Sepal.Width 0.18750000
5 Petal.Width:Sepal.Length 0.09791667
6 Petal.Width:Sepal.Length 0.06666667
7 Sepal.Length:Sepal.Length 0.09791667
8 Sepal.Length:Sepal.Width 0.15625000
9 Sepal.Width:Sepal.Width 0.05625000

最佳答案

您可以使用 tidyverse 函数将“vars”列分开,按字母顺序对所有内容进行排序,然后将命名重新组合在一起:

library(tidyverse)

result <- df %>%
rowwise() %>%
mutate(
separated = list(sort(strsplit(vars, ':')[[1]])),
trimmed = list(gsub('(^ +| +$)', '', separated)),
reordered = paste(trimmed, collapse = ':')
) %>%
select(vars = reordered, value)

vars value
<chr> <dbl>
1 Petal.Length:Sepal.Width 0.188
2 Sepal.Length:Sepal.Length 0.125
3 Petal.Length:Sepal.Length 0.188
4 Petal.Length:Sepal.Length 0.0979
5 Petal.Width:Sepal.Length 0.0979
6 Petal.Width:Sepal.Length 0.0667
7 Petal.Length:Petal.Width 0.025
8 Sepal.Width:Sepal.Width 0.0562
9 Sepal.Length:Sepal.Width 0.156

关于r - 如何在 R 中交换部分字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71551404/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com