如何重新排列数据框中的两列,以使行值在R中匹配?

时间:2019-11-27 19:52:23

标签: r sorting dataframe

我想对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

感谢您的帮助!

1 个答案:

答案 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