使用以下示例数据帧:

a <-  c(1:5)
b <- c("Cat", "Dog", "Rabbit", "Cat", "Dog")
c <- c("Dog", "Rabbit", "Cat", "Dog", "Dog")
d <- c("Rabbit", "Cat", "Dog", "Dog", "Rabbit")
e <- c("Cat", "Dog", "Dog", "Rabbit", "Cat")
f <- c("Cat", "Dog", "Dog", "Rabbit", "Cat")

df <- data.frame(a,b,c,d,e,f)

我想研究如何在不必输入所有列名的情况下对列进行重新排序,例如df[,c("a","d","e","f","b","c")]

我怎么说我想要f列之后的b列和c列呢?(仅引用要移动的列或列范围?).

非常感谢您的帮助.

推荐答案

如果只是将某些列移到末尾,可以创建一个小助手函数,如下所示:

movetolast <- function(data, move) {
  data[c(setdiff(names(data), move), move)]
}

movetolast(df, c("b", "c"))
#   a      d      e      f      b      c
# 1 1 Rabbit    Cat    Cat    Cat    Dog
# 2 2    Cat    Dog    Dog    Dog Rabbit
# 3 3    Dog    Dog    Dog Rabbit    Cat
# 4 4    Dog Rabbit Rabbit    Cat    Dog
# 5 5 Rabbit    Cat    Cat    Dog    Dog

我建议大家养成使用列位置的习惯,尤其不是从程序的Angular ,因为这些位置可能会改变.


"为了好玩"更新

下面是对上述函数的扩展解释.它允许您将列移动到第一个或最后一个位置,或在另一列之前或之后.

moveMe <- function(data, tomove, where = "last", ba = NULL) {
  temp <- setdiff(names(data), tomove)
  x <- switch(
    where,
    first = data[c(tomove, temp)],
    last = data[c(temp, tomove)],
    before = {
      if (is.null(ba)) stop("must specify ba column")
      if (length(ba) > 1) stop("ba must be a single character string")
      data[append(temp, values = tomove, after = (match(ba, temp)-1))]
    },
    after = {
      if (is.null(ba)) stop("must specify ba column")
      if (length(ba) > 1) stop("ba must be a single character string")
      data[append(temp, values = tomove, after = (match(ba, temp)))]
    })
  x
}

try 以下方法.

moveMe(df, c("b", "c"))
moveMe(df, c("b", "c"), "first")
moveMe(df, c("b", "c"), "before", "e")
moveMe(df, c("b", "c"), "after", "e")

您需要调整它以进行一些错误判断——例如,如果您try 将列"b"和"c"移动到"c"之前,您(显然)会得到一个错误.

R相关问答推荐

如何从其他前面列中减go 特定列的平均值?

在ggplot Likert条中添加水平线

ggplot geom_smooth()用于线性回归虚拟变量-没有回归线

如何求解arg必须为NULL或deSolve包的ode函数中的字符向量错误

如何在kableextra调用cell_spec()中忽略NA?

如何在Chart_Series()中更改轴值的 colored颜色 ?

在另存为PNG之前隐藏htmlwidget绘图元素

如果可能,将数字列转换为整数,否则保留为数字

将多列合并为单独的名称—值对

我正在努力用R计算数据集中的中值逐步距离

R spatstat Minkowski Sum()返回多个边界

从圆到R中的多边形的标绘雷达图

如何在PDF格式的kableExtra表格中显示管道字符?

删除在R中的write.table()函数期间创建的附加行

如何在刻面和翻转堆叠条形图中对齐geom_text()

条形图中的条形图没有try 赋予它们的 colored颜色

在REST API中使用参数R

如何在访问之前下载的输入时同时上传和处理所有指定的shiny 输入?

在具有条件的循环中添加行

以列名的字符向量作为参数按行应用自定义函数