让我看看我有没有这个。你有两个数据框;打电话给他们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)