如何在 r 中创建排序向量
How to create a sorted vector in 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.
首先,正如评论者指出的那样,您可以使用 sort
或 order
。但我相信你正在尝试解决作业。
你的问题是一个错字。尝试在控制台中执行:
lst <- list()
lst == NULL
最后一行的计算结果为 R 无法解释的空长度向量 (logical(0)
)。相反,您感兴趣的是
is.null(lst)
这将 return TRUE
或 FALSE
。
对于包含大量列的大型数据集,您可以使用 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))
我有一个随机顺序的元素列表。我想一次读取此数据的每个元素并按排序顺序插入其他列表。我想知道如何在 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.
首先,正如评论者指出的那样,您可以使用 sort
或 order
。但我相信你正在尝试解决作业。
你的问题是一个错字。尝试在控制台中执行:
lst <- list()
lst == NULL
最后一行的计算结果为 R 无法解释的空长度向量 (logical(0)
)。相反,您感兴趣的是
is.null(lst)
这将 return TRUE
或 FALSE
。
对于包含大量列的大型数据集,您可以使用 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))