【问题标题】:R rename columns by using third table [closed]R使用第三个表重命名列[关闭]
【发布时间】:2019-01-22 12:49:48
【问题描述】:

我的问题: 我有 3 张桌子:2 张带 obs。和变量。 这两个表的变量有不同的名称,但描述的是同一件事。所以我想重命名一个表中的变量,而不是将它们合并在一起而不使变量数量加倍。 第三个表是一个包含两个变量名称的表,总是连续的两个匹配项。

如何使用表 #3 重命名表变量? 否则我可以使用表#3 直接加入/合并它们

【问题讨论】:

  • 这读起来就像“玛丽有 4 个姐妹。简比珍妮的一半小 5 岁”之一。你能提供表格和预期的输出吗?

标签: r foreign-keys multiple-columns rename


【解决方案1】:

让我看看我有没有这个。你有两个数据框;打电话给他们df1df2

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)

【讨论】:

  • 是的,你明白了。您的回答有效,但 df 中的某些列与 dfnames df 无关。现在这些名字都没有了。我怎样才能保留它们?
  • 见我上面的补充
  • 首先谢谢!不幸的是,它仍然无法正常工作。现在多余的列将保留,但匹配列的名称更改为一些数字,而不是新名称。
  • 欢迎您给我发电子邮件(见我的个人资料页面)。包括您的数据,并在必要时简要说明预期输出,我会看看我是否可以让代码为您工作。
猜你喜欢
  • 2022-11-17
  • 1970-01-01
  • 1970-01-01
  • 2023-01-13
  • 1970-01-01
  • 2014-08-14
  • 1970-01-01
  • 1970-01-01
  • 2022-08-08
相关资源
最近更新 更多