R中按字母顺序对每一行字符串进行排序

use*_*829 2 sorting r character

我环顾四周,似乎找不到解决这个问题的好方法。

我有一个包含行名称的列。我想按字母顺序对每一行进行排序,以便稍后可以识别具有相同名称但顺序不同的行。

数据如下:

names <- c("John D., Josh C., Karl H.",
        "John D., Bob S., Tim H.",
        "Amy A., Art U., Wes T.",
        "Josh C., John D., Karl H.")

var1 <- rnorm(n = length(names), mean = 0, sd = 2)
var2 <- rnorm(n = length(names), mean = 20, sd = 5)

df <- data.frame(names, var1, var2)
df

                      names       var1     var2
1 John D., Josh C., Karl H. -0.3570142 15.58512
2   John D., Bob S., Tim H. -3.0022367 12.32608
3    Amy A., Art U., Wes T. -0.6900956 18.01553
4 Josh C., John D., Karl H. -2.0162847 16.04281
Run Code Online (Sandbox Code Playgroud)

例如,第 4 行将被排序为与第 1 行类似。第 2 行将被排序为 Bob、John 和 Tim。

我已经尝试过sort(df$names),但这只是将所有行中的名称按字母顺序排序。

tmf*_*mnk 5

使用dplyr,您可以尝试:

df %>%
 rowwise() %>%
 mutate(names = paste(sort(unlist(strsplit(names, ", ", fixed = TRUE))), collapse = ", "))

  names                       var1  var2
  <chr>                      <dbl> <dbl>
1 John D., Josh C., Karl H. -0.226  19.9
2 Bob S., John D., Tim H.    0.424  24.8
3 Amy A., Art U., Wes T.     1.42   25.0
4 John D., Josh C., Karl H.  5.42   20.4
Run Code Online (Sandbox Code Playgroud)

样本数据:

df <- data.frame(names, var1, var2,
                 stringsAsFactors = FALSE)
Run Code Online (Sandbox Code Playgroud)