根据R中的给定列表排序数据帧

时间:2014-10-24 21:00:07

标签: r

我有一个函数,我在其中计算R
中列的计数 我想根据传递给函数的给定列表来安排我的数据框条目

输入以这种形式出现:

complete( c(2, 55, 8, 111, 12))
complete(30:25)

我的数据框按ID升序排列,我希望按照给出的列表进行排列

id   nobs
2    463
8    586
12   338
55   711
111  932

应排序/重新排列为:

id   nobs
2    463
55   711
8    586
111  932
12   338

1 个答案:

答案 0 :(得分:0)

这是使用合并的可能方法:

# data.frame to sort
DF <- 
read.csv(text=
'id,nobs
2,463
8,586
12,338
55,711
111,932')

# keys to use for sorting
keys <- c(2, 55, 8, 111, 12)

keyDF <- data.frame(key=keys,weight=1:length(keys))

merged <- merge(DF,keyDF,by.x='id',by.y='key',all.x=T,all.y=F)
res <- merged[order(merged$weight),c('id','nobs')]

> res
   id nobs
1   2  463
4  55  711
2   8  586
5 111  932
3  12  338

N.B。

  • 如果您的data.frame id包含key向量中不存在的值,那么这些值将转到data.frame的底部。
  • 如果有重复的ID,它们将在排序后保持相邻。