楼主: nothk
7860 3

[问答] 请教data.frame 多列排序问题 [推广有奖]

  • 0关注
  • 0粉丝

本科生

46%

还不是VIP/贵宾

-

威望
0
论坛币
51 个
通用积分
0
学术水平
0 点
热心指数
7 点
信用等级
0 点
经验
530 点
帖子
48
精华
0
在线时间
93 小时
注册时间
2015-4-9
最后登录
2020-11-16

楼主
nothk 发表于 2016-5-14 16:57:39 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
a<-c(1,3,2,4)
b<-c("dd","aa","bb","cc")
c<-c(TRUE,FALSE,FALSE,FALSE)
d<-data.frame(a,b,c)

> d
    a  b     c
1 1 dd  TRUE
2 3 aa FALSE
3 2 bb FALSE
4 4 cc FALSE


我想让C列从小到大排序,再B列从大到小排序

理想的结果:
  a  b     c
1 4 cc FALSE
2 2 bb FALSE
3 3 aa FALSE
4 1 dd  TRUE


网上搜出来的方法是按  d[order(d$c,-d$b),] 但是会出现错误:
Warning message:
In Ops.factor(d$b) : ‘-’ not meaningful for factors
如果我想用这个order函数,要怎么实现正确排序?

还有就是,我最后想到的方法是用sqldf包,直接sqldf("select * from d order by c, b DESC")搞定,
但因为实际要处理的data.frame很大,我需要某十列从小到大,某几列从大到小。
sqldf包处理起来感觉挺慢的, 不知道有没有更加节约时间有效率的方法?

多谢了。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:Frame Data Fram FRA RAM 如何

沙发
hyu9910 在职认证  发表于 2016-5-14 17:05:57
多写几行代码,自己写个小程序排序一列。 然后多次调用就可以吧。

或者,EXCEL里面排序2次EXPAND,也可以

藤椅
万人往LVR 在职认证  发表于 2016-5-14 17:33:10
  1. d[order(c,-as.integer(b)),]
复制代码

板凳
nothk 发表于 2016-5-14 17:47:00
万人往LVR 发表于 2016-5-14 17:33
运行成功,多谢,我昨天试了as.numeric不成功,不过把as.integer忘记了....

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-19 20:20