我有一个数据框,其中有一列和一个列。其中有两条记录。
DF1 =
Name
M_D
ABC123
我有另一个有两列的数据框。我需要在第一个数据帧中使用两个值重命名第二个数据帧列。
DF2 =
PQR LMN
111 345
456 999
我想要DF2如下
M_D ABC123
111 345
456 999
由于
答案 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工具,例如checkmate或testit,以验证列特征是否符合您的期望(例如,PQR
/ {{ 1}}列是一个整数,其值介于0和5之间。
答案 2 :(得分:0)
如果DF1 $ Name的长度与DF2的列数
相同,则此方法有效colnames(DF2) <- DF1$Name