根据R中另一个数据框中的值重命名数据框列

时间:2018-05-11 21:01:22

标签: r dataframe

我有一个数据框,其中有一列和一个列。其中有两条记录。

DF1 =

Name 
M_D
ABC123

我有另一个有两列的数据框。我需要在第一个数据帧中使用两个值重命名第二个数据帧列。

DF2 =

   PQR  LMN
   111  345
   456  999

我想要DF2如下

   M_D  ABC123
   111  345
   456  999

由于

3 个答案:

答案 0 :(得分:2)

您可以使用DF2上的$[[运算符访问DF1的列名称值。由于OP已经提到他甚至不知道DF1的列名,因此选项可以是:

names(DF2) <- DF1[,1]
DF2
#  M_D ABC123
#1 111    345
#2 456    999

#OR
names(DF2) <- DF1[[1]]

#OR
names(DF2) <- DF1$Name

注意: names(DF2) <- DF1[1]无效,因为DF1[1]仍为data.frame类型而names<-需要vector

数据:

DF2 <- read.table(text = 
"PQR  LMN
111  345
456  999",
header = TRUE, stringsAsFactors = FALSE)

DF1 <- read.table(text = 
"Name 
M_D
ABC123",
header = TRUE, stringsAsFactors = FALSE)

答案 1 :(得分:0)

根据您上面的评论,我建议使用dplyr::rename()等内容对其进行硬编码。

DF2 <- DF2 %>% 
  dplyr::rename(
    M_D       = PQR,
    ABC123    = LMN
  )

根据我的经验,您不应该真正相信协作者每次都会为您提供相同的数据集结构。如果他们更改了列名,这将抛出一个错误(这很好 - 你想在管道的早期提醒你这个问题)。如果他们更改了列顺序,dplyr::rename()将优雅地处理它。正确。

考虑其他defensive programming工具,例如checkmatetestit,以验证列特征是否符合您的期望(例如PQR / {{ 1}}列是一个整数,其值介于0和5之间。

答案 2 :(得分:0)

如果DF1 $ Name的长度与DF2的列数

相同,则此方法有效
colnames(DF2) <- DF1$Name