我正在尝试将一些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中获得相同的结果而不会出现未知变量错误?
完全忽略您对如何使用 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)
从根本上来说,该算法很简单:
编辑:根据哈德利的建议,我使用命名向量而不是列表,使生活变得更轻松。我总是忘记命名向量:(