如何在r中创建排序向量

时间:2015-01-06 07:10:15

标签: r

我有一个随机顺序的元素列表。我想一次读取一个数据的每个元素,并按排序顺序插入到其他列表中。我想知道如何在R中做到这一点。我尝试了下面的代码。

lst=list()
x=c(2,3,1,4,5)
for(i in 1:length(x)) ## for reading the elements from x
 {
    if(lst==NULL)
    {
        lst=x[i]
    }
    else
    {
        lst=x[i]
        print(lst)  
        for(k in 2: length(lst)) ## For sorting the elements in a list
        {

            value = lst[k]
            j=k-1   
            while(j>=1 && lst[j]>value)
            {
                lst[j+1] = lst[j]  
                j= j-1
            }
            lst[j+1] = value
        }
    }

    print(lst)
}

但我得到错误

error in if (lst == NULL) { : argument is of length zero.

2 个答案:

答案 0 :(得分:0)

首先,作为指出的评论者,您可以使用sortorder。但我相信你正试图解决一项任务。

你的问题是一个错字。尝试在控制台中执行:

lst <- list()
lst == NULL

最后一行计算为一个空长度向量(logical(0)),其中R没有解释。相反,你对

感兴趣
is.null(lst)

将返回TRUEFALSE

答案 1 :(得分:0)

对于包含大量列的大型数据集,您可以使用do.call

df1 <- df[do.call(order, df),]

通过指定列名

来检查order
df2 <- df[with(df, order(V1, V2, V3, V4)),]
identical(df1,df2)
#[1] TRUE

如果您需要反向order

df[do.call(order, c(df,decreasing=TRUE)),]

数据

set.seed(24)
df <- as.data.frame(matrix(sample(letters,10*4,replace=TRUE),ncol=4))