我有一个 tibble,其中的列名包含空格和特殊字符,这使得使用起来很麻烦。我想在处理数据时将这些列名称更改为更易于使用的名称,然后在最后将它们更改回原始名称以进行显示。理想情况下,我希望能够将其作为管道的一部分来完成,但是我还没有弄清楚如何使用rename_with()
.
样本数据:
df <- tibble(oldname1 = seq(1:10),
oldname2 = letters[seq(1:10)],
oldname3 = LETTERS[seq(1:10)])
cols_lookup <- tibble(old_names = c("oldname4", "oldname2", "oldname1"),
new_names = c("newname4", "newname2", "newname1"))
期望的输出:
> head(df_renamed)
# A tibble: 6 x 3
newname1 newname2 oldname3
<int> <chr> <chr>
1 1 a A
2 2 b B
3 3 c C
4 4 d D
5 5 e E
6 6 f F
在此工作期间,某些列被删除并重新排序,因此当将它们转换回来时,将在cols_lookup
不再存在的表df
。还创建了新列df
我想保持名称不变。
我知道已经有人问过类似的问题,但是答案要么不适用于小标题,要么在管道中(例如,那些使用match()
),或者如果两个表中的列并非都以相同的顺序出现,则不起作用。
我们可以用rename_at
。从主查找表中,filter
所在的行names
的数据集有一个匹配项(filtered_lookup)
,然后将其用于rename_at
我们在其中指定“old_names”vars
并替换为“new_names”
library(dplyr)
filtered_lookup <- cols_lookup %>%
filter(old_names %in% names(df))
df %>%
rename_at(vars(filtered_lookup$old_names), ~ filtered_lookup$new_names)
或者使用rename_with
,使用相同的逻辑
df %>%
rename_with(.fn = ~filtered_lookup$new_names, .cols = filtered_lookup$old_names)
或者另一个选择是rename
与拼接(!!!
) 来自命名向量
library(tibble)
df %>%
rename(!!! deframe(filtered_lookup[2:1]))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)