Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 有没有更简单的方法按列的值对数据重新排序?_R - Fatal编程技术网

R 有没有更简单的方法按列的值对数据重新排序?

R 有没有更简单的方法按列的值对数据重新排序?,r,R,我在顺序周围编写了这个小小的包装器,但我担心我的实现是蹩脚的。我蜷缩在角落里,等待R指令或算法效率之神敲打我的人体工程学键盘:-( set.seed(1001) 高度我对格式良好的问题不感兴趣。我认为代码可读且合理。如果您想稍微收紧它,可以通过使用“[[”并在“[”内创建索引来删除粘贴()操作: ReorderDataByColumn2请参见plyr中的排列功能: library(plyr) arrange(mtcars, cyl) arrange(mtcars, desc(cyl)) arra

我在
顺序
周围编写了这个小小的包装器,但我担心我的实现是蹩脚的。我蜷缩在角落里,等待R指令或算法效率之神敲打我的人体工程学键盘:-(

set.seed(1001)

高度我对格式良好的问题不感兴趣。我认为代码可读且合理。如果您想稍微收紧它,可以通过使用“[[”并在“[”内创建索引来删除粘贴()操作:


ReorderDataByColumn2请参见plyr中的排列功能:

library(plyr)
arrange(mtcars, cyl)
arrange(mtcars, desc(cyl))
arrange(mtcars, vs, am)
函数的定义非常简单:

arrange <- function (df, ...) {
    ord <- eval(substitute(order(...)), df, parent.frame())
    unrowname(df[ord, ])
}

arrange我从来都不知道这样的双括号“[[”。我以为这只是列表的索引符号。但它也是将参数计算为字符串的简写法?它不是真正的简写法……它是原始方法。“[”评估其参数。它的缺点是只接受一个参数,因此如果按多个列排序,则将失败。如果要为多个列编制索引,则可以执行
x[,column,drop=F]
我现在很困惑。
粘贴()
在这种情况下,你会怎么做?+1问一些我自己都想知道的问题……请参阅这里的答案,以获得更多好的选择:
 ReorderDataByColumn2 <- function(x, column, desc=FALSE) {
    return(
      x[ do.call( order, x[ , column, drop=FALSE ]  ), ]
      ) }
ReorderDataByColumn2 <- function(x, column) {
    if(column %in% names(x)){return(x[ order( x[[column]]), ]) 
     }else{ cat("Column ", column, "not in dataframe ", deparse(substitute(x))) }
}
library(plyr)
arrange(mtcars, cyl)
arrange(mtcars, desc(cyl))
arrange(mtcars, vs, am)
arrange <- function (df, ...) {
    ord <- eval(substitute(order(...)), df, parent.frame())
    unrowname(df[ord, ])
}