楼主: jiangli0405007
6933 8

[问答] 求助,用R实现txt数据按某列筛选并保存筛选后的数据 [推广有奖]

  • 0关注
  • 0粉丝

初中生

28%

还不是VIP/贵宾

-

威望
0
论坛币
8 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
142 点
帖子
16
精华
0
在线时间
8 小时
注册时间
2016-1-9
最后登录
2019-8-8

楼主
jiangli0405007 发表于 2016-1-9 17:18:01 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
   现有两个txt数据 a.txt和b.txt,其行数相同,列数相同,如下
    a.txt
name           maxlen        count           r        IDs
C13          741                  0           0          NR
P14     44                55        14.16946        NM
B1           555        41        2.244693        NM
L18           547        8        1.048337        NR

b.txt
name          maxlen        count          r        IDs
C13           915        0        0        NR
P14     1185        207        14.16946        NM
B1           795        22        2.244693        NM
L18           619        18        1.048337        NR


现在想筛选r值都>10的行
n0 = (a$count>10 & b$count>10)
sum(n0) #计算得到2个,即有P14和B1的r值同时>10,则该行是需要的


怎样将这需要的两行输出保存到另两个txt文件?
即得到
c.txt
name          maxlen        count          r        IDs
P14     44                55        14.16946        NM
B1           555        41        2.244693        NM

d.txt
name          maxlen        count          r        IDs
P14     1185        207        14.16946        NM
B1           795        22        2.244693        NM

二维码

扫码加我 拉你入群

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

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

关键词:R实现 txt Count name max count

沙发
yijiaobani 发表于 2016-1-9 20:20:27
你这个问题的解决思路:
目的:假定两个文件有一样的name,求出同一个name,count都大于10的行,分别保存。
思路:
1、把两个文件合并成一个新文件new
2、找到counts大于10的行,保存成文件result
3、找到有重复的行,保存成文件point,提取出name列(用函数duplicated)
4、用提取的name,分别在a.txt和b.txt提取结果为ac.txt和bc.txt。
代码如下:
  1. > a;b
  2.   name maxlen count         r IDs
  3. 1  C13    741     0  0.000000  NR
  4. 2  P14     44    55 14.169460  NM
  5. 3   B1    555    41  2.244693  NM
  6. 4  L18    547     8  1.048337  NR
  7.   name maxlen count         r IDs
  8. 1  C13    915     0  0.000000  NR
  9. 2  P14   1185   207 14.169460  NM
  10. 3   B1    795    22  2.244693  NM
  11. 4  L18    619    18  1.048337  NR
  12. > rbind(a,b) ->new;new
  13.   name maxlen count         r IDs
  14. 1  C13    741     0  0.000000  NR
  15. 2  P14     44    55 14.169460  NM
  16. 3   B1    555    41  2.244693  NM
  17. 4  L18    547     8  1.048337  NR
  18. 5  C13    915     0  0.000000  NR
  19. 6  P14   1185   207 14.169460  NM
  20. 7   B1    795    22  2.244693  NM
  21. 8  L18    619    18  1.048337  NR
  22. > subset(new,count>10) ->result;
  23. > duplicated(result["name"]) ->lo;lo
  24. [1] FALSE FALSE  TRUE  TRUE FALSE
  25. > result[lo,]$name ->point;point
  26. [1] P14 B1
  27. Levels: B1 C13 L18 P14
  28. > a[point,] ->ac.txt;ac.txt
  29.   name maxlen count        r IDs
  30. 4  L18    547     8 1.048337  NR
  31. 1  C13    741     0 0.000000  NR
  32. > b[point,] -> bc.txt;bc.txt
  33.   name maxlen count        r IDs
  34. 4  L18    619    18 1.048337  NR
  35. 1  C13    915     0 0.000000  NR
复制代码
已有 1 人评分经验 收起 理由
xiaowenzi22 + 20 热心帮助其他会员

总评分: 经验 + 20   查看全部评分

藤椅
jiangli0405007 发表于 2016-1-9 20:43:55
嗯,你这个思路很正确,我后来用了直接粗暴的比较
c<-a[a$count>10 & b$count>10,]
d<-b[a$count>10 & b$count>10,]

write.csv(c,"C:/Users/JiangLi/Documents/R/c.csv")
write.csv(d,"C:/Users/JiangLi/Documents/R/d.csv")

我研究研究你的。

想追问一下,我想将a中的r值除以b中的r值,将结果数列导出,要怎么写?

十分感谢!!!1

板凳
jiangli0405007 发表于 2016-1-9 20:45:38
yijiaobani 发表于 2016-1-9 20:20
你这个问题的解决思路:
目的:假定两个文件有一样的name,求出同一个name,count都大于10的行,分别保存。 ...
嗯,你这个思路很正确,我后来用了直接粗暴的比较
c<-a[acount>10 & bcount>10,]
d<-b[acount>10 & bcount>10,]

write.csv(c,"C:/Users/JiangLi/Documents/R/c.csv")
write.csv(d,"C:/Users/JiangLi/Documents/R/d.csv")

我研究研究你的。

想追问一下,我想将a中的r值除以b中的r值,将结果数列导出,要怎么写?

十分感谢!!!1

报纸
jiangli0405007 发表于 2016-1-9 20:45:46
yijiaobani 发表于 2016-1-9 20:20
你这个问题的解决思路:
目的:假定两个文件有一样的name,求出同一个name,count都大于10的行,分别保存。 ...
嗯,你这个思路很正确,我后来用了直接粗暴的比较
c<-a[acount>10 & bcount>10,]
d<-b[acount>10 & bcount>10,]

write.csv(c,"C:/Users/JiangLi/Documents/R/c.csv")
write.csv(d,"C:/Users/JiangLi/Documents/R/d.csv")

我研究研究你的。

想追问一下,我想将a中的r值除以b中的r值,将结果数列导出,要怎么写?

十分感谢!!!1

地板
yijiaobani 发表于 2016-1-10 12:46:31
jiangli0405007 发表于 2016-1-9 20:45
嗯,你这个思路很正确,我后来用了直接粗暴的比较
c10 & bcount>10,]
d10 & bcount>10,]
那就用a$r/b$r ->result
save(result,file="d:/result.Rdata")就可以了吧
已有 1 人评分论坛币 收起 理由
admin_kefu + 10 热心帮助其他会员

总评分: 论坛币 + 10   查看全部评分

7
刘伟源 发表于 2016-1-10 15:58:38
我选的是r>2的行,10也一样的。
读取到的是数据框的格式,所以方便了很多

不知道解决楼主的问题没有

QQ图片20160110160143.png (7.05 KB)

QQ图片20160110160143.png

已有 1 人评分论坛币 收起 理由
admin_kefu + 20 热心帮助其他会员

总评分: 论坛币 + 20   查看全部评分

8
jiangli0405007 发表于 2016-1-10 17:49:37
yijiaobani 发表于 2016-1-10 12:46
那就用a$r/b$r ->result
save(result,file="d:/result.Rdata")就可以了吧
恩恩,可以的,但是为什么我存为“result.csv ”是乱码呢

9
jiangli0405007 发表于 2016-1-10 17:50:56
刘伟源 发表于 2016-1-10 15:58
我选的是r>2的行,10也一样的。
读取到的是数据框的格式,所以方便了很多
嗯解决了,谢谢!

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

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