r - R使用第三个表重命名列
问题描述
我的问题:我有 3 张桌子:2 张带 obs。和变量。这两个表的变量有不同的名称,但描述的是同一件事。所以我想重命名一个表中的变量,而不是将它们合并在一起而不使变量数量加倍。第三个表是一个包含两个变量名称的表,始终是一行中的两个匹配项。
如何使用表 #3 重命名表变量?否则我可以使用表#3 直接加入/合并它们吗
解决方案
让我看看我有没有这个。你有两个数据框;打电话给df1
他们df2
:
df1 <- data.frame(
one = 1:10,
two = 1:10,
three = 1:10
)
df2 <- data.frame(
third = 1:10,
second = 1:10,
first = 1:10
)
它们具有表示相同事物但名称不同的变量。因此,例如“一个”对应于“第一”。
您还有第三个数据框将名称“映射”在一起,如下所示:
dfnames <- data.frame(
a = c("one", "two", "three"),
b = c("first", "second", "third"),
stringsAsFactors = FALSE
)
您的目标是更改名称,例如,df2
以匹配df1
使用该映射数据框的名称。这是一种方法:
names(df2) <- dfnames$a[match(names(df2), dfnames$b)]
现在假设df2
您要保留一个额外的列(“forth”),但未列在dfnames
:
df2 <- data.frame(
fourth = 1:10,
third = 1:10,
second = 1:10,
first = 1:10
)
然后我们可以这样做:
newnames <- dfnames$a[match(names(df2), dfnames$b)]
names(df2) <- ifelse(is.na(newnames), names(df2), newnames)