[英]Rename columns of a dataframe based on another dataframe except columns not in that dataframe in 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()
将优雅而正确地处理它。
考虑使用其他防御性编程工具(如checkmate或testit)来验证列特性是否符合您的期望( 例如 , PQR
/ M_D
列是一个介于0到5之间的整数)。
如果DF1 $ Name的长度与DF2的列数相同,这将起作用
colnames(DF2) <- DF1$Name
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.