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),但这只是将所有行中的名称按字母顺序排序。
使用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)