繁体   English   中英

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

[英]Rename dataframe columns based on values in another dataframe in R

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

DF1 =

Name 
M_D
ABC123

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

DF2 =

   PQR  LMN
   111  345
   456  999

我想要DF2如下

   M_D  ABC123
   111  345
   456  999

谢谢

您可以为列名访问值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)

根据上面的评论,我建议使用dplyr::rename()类的东西对其进行硬编码。

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

以我的经验,您不应该真正相信协作者每次都会为您提供相同的数据集结构。 如果他们更改了列名,这将引发错误(这很好-您希望在管道中尽早收到有关该问题的警报)。 如果他们更改了列顺序,则dplyr::rename()将优雅而正确地处理它。

考虑使用其他防御性编程工具(如checkmatetestit)来验证列特性是否符合您的期望( 例如PQR / M_D列是一个介于0到5之间的整数)。

如果DF1 $ Name的长度与DF2的列数相同,这将起作用

colnames(DF2) <- DF1$Name

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM