【发布时间】:2017-01-07 08:20:44
【问题描述】:
我使用来自不同来源的数据集。通常不同的来源会为同一个变量提供不同的名称。例如,来自源 A 的变量将被称为“Year”,但来自源 B 的变量将被命名为“YEAR”。或者 A 中的“Revenue”和 B 中的“TOT.REV”。我想编写一个脚本,重命名所有不同来源的变量并为它们提供一致的名称。
现在我正在使用dplyr::rename 执行此操作,但考虑到大量变量,管理起来非常可怕且笨拙。我现在的样子是这样的
rename(df, Year = YEAR, Month = MONTH, Revenue = TOT.REV, ...)
除了我在一个列表中循环它,该列表包含来自不同来源的所有数据框。
问题是,如果我想更改任何内容,我必须在脚本中维护这个庞大的列表。不是很方便,也很丑陋。我想用我可以在某处的电子表格中维护的参考表来做到这一点。你知道有什么巧妙的方法吗?提前致谢。 :)
【问题讨论】:
-
不精确映射的函数将成为您的朋友 - 即,也许您的第一步应该是
tolower()或类似的东西,以便在相同的情况下获得所有内容,如果您可以使用make.names()不必担心空格或其他非标准字符。这将使您的代码更加灵活,因此TOT.REV、TOT.rev和tot rev不必分别进行显式编码。 -
就我个人而言,我不明白在 R 中维护数据框或命名向量(可能还有附带的函数)比维护电子表格(和附带的函数)更难,但可以肯定 - 你可以使用电子表格。什么东西阻止你?只需在当前数据名称和参考名称之间进行左连接或匹配即可。
-
“只需在当前数据名称和参考名称之间进行左连接或匹配即可。”是的!这正是我想要的!但是,呃……我该怎么做? (对不起):'(
-
你卡在哪里了?查看
?match或?merge或?dplyr::left_join底部的示例。我不知道如何为您提供的内容提供更多帮助...如果您创建 reproducible example - 创建一个小型查找表和几个示例数据框(它们甚至不需要行 - 只需列名) 并试一试。你大概能猜出来。如果您遇到困难,请发布您的示例以及您尝试过的内容,并确保您清楚预期的输出。 -
您的问题表明您正在使用数据库。您可以编写自定义视图来重命名数据库中的列吗?