使用dplyr的rename()包括不在数据集中的变量名

Ame*_*aMN 7 r plyr dplyr

我正在尝试将一些plyr代码转换为dplyr,并且在dplyr中遇到了rename()的新功能.我希望能够为一组具有重叠但不完全相同的原始名称的数据集重用单个rename()表达式.例如,

sample1 <- data.frame(A=1:10, B=letters[1:10])

sample2 <- data.frame(B=11:20, C=letters[11:20])
Run Code Online (Sandbox Code Playgroud)

然后,

 rename(sample1, var1 = A, var2 = B, var3 = C)
Run Code Online (Sandbox Code Playgroud)

我希望结果是变量A重命名为var1,B重命名为var2,在这种情况下不添加var3.相反,我得到了

错误:未知变量:C.

相反,plyr语法可以让我使用

rename(sample1, c("A" = "var1", "B" = "var2", "C" = "var3"))
rename(sample2, c("A" = "var1", "B" = "var2", "C" = "var3"))
Run Code Online (Sandbox Code Playgroud)

而不是抛出错误.有没有办法在dplyr中获得相同的结果而不会出现未知变量错误?

ear*_*ino 5

完全忽略您对如何使用 dplyr 执行此操作的实际请求,我想建议使用查找表的不同方法:

sample1 <- data.frame(A=1:10, B=letters[1:10])
sample2 <- data.frame(B=11:20, C=letters[11:20])

rename_map <- c("A"="var1",
                "B"="var2",
                "C"="var3")

names(sample1) <- rename_map[names(sample1)]
str(sample1)

names(sample2) <- rename_map[names(sample2)]
str(sample2)
Run Code Online (Sandbox Code Playgroud)

从根本上来说,该算法很简单:

  1. 构建当前变量名称到所需名称的查找表
  2. 使用 name() 函数,使用映射索引查找映射,并将这些映射变量分配给适当的列。

编辑:根据哈德利的建议,我使用命名向量而不是列表,使生活变得更轻松。我总是忘记命名向量:(

  • 您可以通过使用命名字符向量而不是命名列表来使这变得更简单 (2认同)