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

标签 r

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

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/

相关文章:

r - User-Function,已定义但未通过代码找到的形式对象

r - 有没有好的 R 对象浏览器?

r - Rmarkdown中的方程式编号-用于导出到Word

r - 将变化曲线应用于数据框

r - 在 R 中使用 apply 函数进行字符串连接

r - 按多列键的第三列子集 data.table

r - 基于每列中的观察数的子集数据框

r - R中的doRedis/foreach GBM并行处理错误

r - 将列添加到 sqlite 数据库

r - 如何将乱序值设置为 NA?