【问题标题】:order a dataframe according to a given list in R [duplicate]根据R中的给定列表对数据帧进行排序[重复]
【发布时间】:2014-12-20 18:43:02
【问题描述】:

我有一个函数可以计算 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

【问题讨论】:

  • 您不必订购它们,这只是索引。在complete 函数的末尾,让它返回数据帧df,作为df[df$id %in% x, ] 其中x 是给complete 的参数

标签: r


【解决方案1】:

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

# 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

注意

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

【讨论】:

  • 有没有办法改变侧面的编号? 1,4,2,5,3 ->>>1,2,3,4,5
  • 是的:row.names(res) &lt;- 1:nrow(res)
猜你喜欢
  • 2020-06-10
  • 1970-01-01
  • 2012-07-20
  • 1970-01-01
  • 2020-06-02
  • 2018-12-08
  • 2019-03-07
  • 2022-12-18
  • 1970-01-01
相关资源
最近更新 更多