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是因为我认为它最适合我的需要。