R 根据第二个数据帧中的值替换数据帧中的标头

R 根据第二个数据帧中的值替换数据帧中的标头,r,dataframe,R,Dataframe,假设我有一个如下所示的数据帧: df.A A B C x 1 3 4 y 5 4 6 z 8 9 1 我想根据第二列中的列值替换第一列中的列名: df.B Low High A D B F C G 这样我就可以: df.A D F G x 1 3 4 y 5 4 6 z 8 9 1 我该怎么做 我曾尝试从df.B中提取向量df.B$High,并在名称(df.A)中使用它,但所有内容都是按字母顺序排列的,并在一个上面移动。此外,只有当df.A中的列顺序相对于

假设我有一个如下所示的数据帧:

df.A

  A B C
x 1 3 4
y 5 4 6
z 8 9 1
我想根据第二列中的列值替换第一列中的列名:

 df.B

 Low High
 A   D
 B   F
 C   G
这样我就可以:

df.A
  D F G
x 1 3 4
y 5 4 6
z 8 9 1
我该怎么做

我曾尝试从
df.B
中提取向量
df.B$High
,并在
名称(df.A)
中使用它,但所有内容都是按字母顺序排列的,并在一个上面移动。此外,只有当
df.A
中的列顺序相对于
df.B$High
中的元素保持不变时,这才有效,但情况并非总是如此(在我的真实示例中,没有数字或字母方式将二者排序为相同的顺序)。所以我想我需要一个
rbind
类型的参数来匹配元素,但我不确定


谢谢

您可以使用
重命名
plyr

library(plyr)
dat <- read.table(text = "  A B C
 x 1 3 4
 y 5 4 6
 z 8 9 1",header = TRUE,sep = "")
> new <- read.table(text = "Low High
  A   D
  B   F
  C   G",header = TRUE,sep = "")
> rename(dat,replace = setNames(new$High,new$Low))
  D F G
x 1 3 4
y 5 4 6
z 8 9 1
库(plyr)
dat新重命名(dat,replace=SETNAME(新$High,新$Low))
D F G
x134
y 5 4 6
Z891

使用
匹配

df.A <- read.table(sep=" ", header=T, text="
A B C
x 1 3 4
y 5 4 6
z 8 9 1")
df.B <- read.table(sep=" ", header=T, text="
Low High
A D
B F
C G")

df.C <- df.A
names(df.C) <- df.B$High[match(names(df.A), df.B$Low)]
df.C
#   D F G
# x 1 3 4
# y 5 4 6
# z 8 9 1

df.A您可以使用
df.B
的行名玩游戏,使查找更方便:

rownames(df.B) <- df.B$Low
names(df.A) <- df.B[names(df.A),"High"]

df.A
##   D F G
## x 1 3 4
## y 5 4 6
## z 8 9 1

rownames(df.B)这里有一种滥用
因子的方法:

f <- factor(names(df.A), levels=df.B$Low)
levels(f) <- df.B$High
f
## [1] D F G
## Levels: D F G

names(df.A) <- f

## Desired results

f谢谢大家的回答!我选择@joran's是因为我认为它最适合我的需要。