关于如何将列移到第一个或最后一个位置,有很棒的问题和答案。
使用dplyr
,最佳答案分别模拟为:
iris2 <- iris %>% head(2)
iris2 %>% select( Sepal.Width, everything()) # move Sepal.Width to first
# Sepal.Width Sepal.Length Petal.Length Petal.Width Species
# 1 3.5 5.1 1.4 0.2 setosa
# 2 3.0 4.9 1.4 0.2 setosa
iris2 %>% select(-Sepal.Width, Sepal.Width) # move Sepal.Width to last
# Sepal.Length Petal.Length Petal.Width Species Sepal.Width
# 1 5.1 1.4 0.2 setosa 3.5
# 2 4.9 1.4 0.2 setosa 3.0
然而,我没有找到任何简单的方法来移动一列之后或之前的一个给定的。
预期产出:
iris2 %>% move_at(Species, Sepal.Width, side = "before")
# Sepal.Length Species Sepal.Width Petal.Length Petal.Width
# 1 5.1 setosa 3.5 1.4 0.2
# 2 4.9 setosa 3.0 1.4 0.2
iris2 %>% move_at(Species, Sepal.Width, side = "after")
# Sepal.Length Sepal.Width Species Petal.Length Petal.Width
# 1 5.1 3.5 setosa 1.4 0.2
# 2 4.9 3.0 setosa 1.4 0.2
6条答案
按热度按时间1hdlvixo1#
rlang::enquo
我可以使它更好,然后使用@Zsombor的答案我可以使它更短,更优雅。旧的解决方案(在基地R)在答案的结尾 *示例:
下面是一个简单的解决方案,只使用基本R编程:
vuktfyat2#
不管原始的列顺序如何,这似乎都能起作用(感谢@Moody_Mudskipper的评论):
j2datikz3#
顺便说一句另一个解决办法是
由reprex package(v0.2.0)于2018年8月31日创建。
klr1opcd4#
我发现了一个有趣的函数(moveMe,由@A5C1D2H2I1M1N2O1R2T1编写),它非常适合这个问题:
它还允许更复杂的指令:
6uxekuva5#
为了完成这些答案,有一个名为
relocate()
的函数,因为dplyr 1.0.0
:创建于2022年10月18日,使用reprex v2.0.2
x6492ojm6#
另一个Base R解决方案(不确定它如何与其他解决方案进行基准测试)。