当前位置:  开发笔记 > 编程语言 > 正文

在dplyr和列中使用重命名时避免错误不存在

如何解决《在dplyr和列中使用重命名时避免错误不存在》经验,为你挑选了2个好方法。

在某些情况下,是否有一种在dplyr中使用重命名功能的聪明方法是不存在要重命名的列?

例如,我希望以下内容不会导致错误

mtcars%>%rename(miles_per_gallon=mpg,missing_varible=foo)

(结果如下:错误:未知变量:foo.)

而是完成所有可能重命名的数据框.

目前,我在重命名之前明确检查特定列是否存在

谢谢

伊恩



1> 小智..:

也许不是设计者的意图,但是您可以利用带范围的动词rename_alldplyr函数recode,该函数采用一个或多个键值对,例如old_name = "New Name"

library(dplyr)

rename_all(iris, recode, Sepal.Length = "sepal_length", cyl = "cylinder")
#     sepal_length Sepal.Width Petal.Length Petal.Width    Species
# 1            5.1         3.5          1.4         0.2     setosa
# 2            4.9         3.0          1.4         0.2     setosa
# 3            4.7         3.2          1.3         0.2     setosa
# 4            4.6         3.1          1.5         0.2     setosa
# 5            5.0         3.6          1.4         0.2     setosa
# 6            5.4         3.9          1.7         0.4     setosa
# 7            4.6         3.4          1.4         0.3     setosa
# 8            5.0         3.4          1.5         0.2     setosa
# 9            4.4         2.9          1.4         0.2     setosa



2> Sam Dickson..:

有时可以不做任何事情dplyr.这可能是其中之一.我会设置一个作为键操作的向量:

namekey <- c(mpg="miles_per_gallon", cyl="cylinders", disp="displacement", hp="horse_power",
             drat="rear_axle_ratio", wt="weight", qsec="quarter_mile_time", vs="v_s",
             am="transmission", gear="number_of_gears", carb="number_of_carburetors",
             foo="missing_variable")

mtcars1 <- mtcars[,1:2]
mtcars1$foo <- rnorm(nrow(mtcars1))

names(mtcars1) <- namekey[names(mtcars1)]

head(mtcars1)
#                   miles_per_gallon cylinders missing_variable
# Mazda RX4                     21.0         6       -0.9901081
# Mazda RX4 Wag                 21.0         6        0.2338014
# Datsun 710                    22.8         4       -0.3077473
# Hornet 4 Drive                21.4         6        1.1200518
# Hornet Sportabout             18.7         8        0.7482842
# Valiant                       18.1         6        0.4206614

获得密钥后,只需执行一次易于理解的代码,即可进行重命名.


这仅适用于所有列都在`namekey`向量中.如果缺少一个,则没有错误,但它也重命名为"NA".来自@wibeasley的`plyr`答案让你可以在不丢失未知列名的情况下完成:`plyr :: rename(mtcars1,replace = namekey,warn_missing = F)`
推荐阅读
爱唱歌的郭少文_
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有