在R中依据另一数据集列顺序重排数据框(支持dplyr)
调整数据框列名并按指定顺序重排行
问题描述
在R中有两个数据框df1和df2:
df1的var1列顺序为A、B、C、Ddf2的var1列顺序为D、C、B、A
需要完成两项操作:
- 将
df2的var1列重命名为var2 - 按照
df1的var1列顺序重新排列df2的行
是否可以用dplyr函数实现?附原始数据代码:
library(tidyverse) df1 = tibble(var1 = c("A","B","C","D"),val1 = c(2,3,4,5))%>% mutate(var1 = as.factor(var1)) df2 = tibble(var1 = c("D","C","B","A"),val2 = c(101,103,17,99))%>% mutate(var1 = as.factor(var1))
解决方案(使用dplyr)
完全可以用dplyr的函数实现,以下是两种简洁的实现方式:
方法一:利用因子水平匹配顺序
由于df1$var1是因子类型,其内置的水平顺序正好是我们需要的A、B、C、D,直接借助这个水平排序即可:
library(dplyr) df2_processed <- df2 %>% rename(var2 = var1) %>% # 重命名列 arrange(factor(var2, levels = levels(df1$var1))) # 按df1的var1水平顺序排序
方法二:直接指定匹配顺序(兼容非因子列场景)
如果df1$var1不是因子类型,也可以通过match函数直接匹配df1$var1的顺序:
df2_processed <- df2 %>% rename(var2 = var1) %>% arrange(match(var2, df1$var1)) # 按var2在df1$var1中的位置排序
处理后的df2_processed结构如下:
# A tibble: 4 × 2 var2 val2 <fct> <dbl> 1 A 99 2 B 17 3 C 103 4 D 101
内容的提问来源于stack exchange,提问作者Homer Jay Simpson
相关产品推荐
相关产品推荐

