楼主: evilbatuu
1678 3

[问答] 数据筛选后的排序问题R语言 [推广有奖]

  • 0关注
  • 0粉丝

小学生

21%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
46 点
帖子
4
精华
0
在线时间
3 小时
注册时间
2010-8-18
最后登录
2022-6-16

楼主
evilbatuu 发表于 2016-10-12 17:18:51 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
有两个csv文件,一个data.csv,数据大概是这样
         name    English   Math  Gender  
1        xs           52       84        F
2        ab           34       23       F
3       bc           56       54        M
4......     共60个数据行;
另外一个是student.csv,只有一列,是name,但只有10行
        name
1   xs
2   cd
.....有10个名字
我想把data中的数据按照student中的name顺序筛选出来,并且按照student中的顺序排列,不要按照字母顺序
newdata<-subset(data,data$name%in%student)
但是选出来的newdata中name是乱序的,不是按照原来student中的顺序的,不知道有什么办法能够保留原来student中的顺序呢

二维码

扫码加我 拉你入群

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

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

关键词:数据筛选 R语言 Student English Englis English

沙发
飞天玄舞6 在职认证  发表于 2016-10-12 20:29:26
第一,你抽取的newdata应该为
  1. newdata<-subset(data,data$name%in%student$name)
复制代码

再是你需要编一个小程序,如下:
  1. ## function char_sub(x,y), x is the order of your requirement, y is
  2. ## the data you want to order.
  3. char_sub<-function(x,y){
  4.   s<-numeric(length(x))
  5.   for(i in 1:length(x)){
  6.     for(j in 1:length(y)){
  7.       if(x[i]==y[j])
  8.         s[i]=j
  9.     }
  10.   }
  11.   return(s)
  12. }
  13. newdata[char_sub(student$name,newdata$name),]
复制代码

这样就抽取出来了。

藤椅
飞天玄舞6 在职认证  发表于 2016-10-12 21:01:31
刚才一个代码写错了,现在改过来了[lol]

板凳
evilbatuu 发表于 2016-10-13 07:23:50
我自己后来想了个办法,在student中添加了一列Num按照1-10编号数字,然后用merge函数筛选
newdata<-merge(data,student,by="name",all.y=T)
之后再按照Num这列进行排序就可以了
newdata<-newdata[order(newdata$Num),]

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-21 16:12