我有两个数据帧如下:

df1 <- data.frame (a  = c(1,2,3,4,5),
                  b = c(6,7,8,9,10),
                  x = c(6,7,8,9,10),
                  d = c(6,7,8,9,10),
                  z = c(6,7,8,9,10)
                  )
df1

看起来像是:

a   b   x   d   z
1   6   6   6   6
2   7   7   7   7
3   8   8   8   8
4   9   9   9   9
5   10  10  10  10

另一个数据帧df2

df2 = data.frame (km = c("d","z","b","x","a"))

如下所示:

km
d
z
b
x
a

我想按照第二个数据帧的行值对第一个数据帧的列进行排序,这样输出如下:

d   z   b   x   a
6   6   6   6   1
7   7   7   7   2
8   8   8   8   3
9   9   9   9   4
10  10  10  10  5

推荐答案

在基数R中,只需使用df2$km来设置df1列的子集:

df1[, df2$km]

或者使用dplyr,使用select(all_of()):

library(dplyr)

df1 %>%
  select(all_of(df2$km))

任何一种方法的结果:

   d  z  b  x a
1  6  6  6  6 1
2  7  7  7  7 2
3  8  8  8  8 3
4  9  9  9  9 4
5 10 10 10 10 5

R相关问答推荐

使用rlang s arg_match判断函数输入列表

变量计算按R中的行更改

更改绘图上的x轴断点,而不影响风险?

使用R中相同值创建分组观测指标

如何编辑ggplot的图例字使用自定义对象(gtable)?'

如何在kableextra调用cell_spec()中忽略NA?

如何写一个R函数来旋转最后n分钟?

使用across,starts_with和ifelse语句变更多个变量

从所有项的 struct 相同的两级列表中,将该第二级中的所有同名项绑定在一起

QY数据的处理:如何定义QY因素的水平

根据列表中项目的名称合并数据框和列表

在列表中排列R数据框中的列顺序

将列表中的字符串粘贴到R中for循环内的dplyr筛选器中

TidyVerse中长度不等的列结合向量

R中的Desolve:返回的导数数错误

如何用不同长度的向量填充列表?

随机生成样本,同时在R内的随机样本中至少包含一次所有值

根据向量对列表元素进行排序

通过分析特定列中的字符串在数据框中创建新的行和列

Gggvenn为Venn增加了不存在的价值