我想对2列data.frame进行排序,其中列x值是列y值的较短版本,并且每个列x值仅与一个列y值匹配。
例如,输出应在同一行中给出x列的“ L1”值和y列的“ E17-L1”值。
这是我的数据集的样子:
df <- data.frame(x = c("L1", "L10", "L100", "L101"),
y = c("G1-L100", "E17-L1", "E14-L101", "G15-L10"))
df
x y
1 L1 G1-L100
2 L10 E17-L1
3 L100 E14-L101
4 L101 G15-L10
我需要第x列保持相同的顺序,并按原样重新排列y列:
df
x y
1 L1 E17-L1
2 L10 G15-L10
3 L100 G1-L100
4 L101 E14-L101
感谢您的帮助!
答案 0 :(得分:0)
一种方法是通过删除match
的前缀部分并使用该索引对'y'进行排序,以将{x1中的值与'y'的子字符串中的值str_remove
library(stringr)
library(dplyr)
df %>%
mutate_all(as.character) %>%
mutate(y = y[match(x, str_remove(y, ".*-"))])
# x y
#1 L1 E17-L1
#2 L10 G15-L10
#3 L100 G1-L100
#4 L101 E14-L101