楼主: yukuang
2099 7

[问答] 请教高手高效R语句(程序)写法。 [推广有奖]

  • 0关注
  • 0粉丝

大专生

25%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
0
学术水平
0 点
热心指数
1 点
信用等级
0 点
经验
266 点
帖子
49
精华
0
在线时间
30 小时
注册时间
2010-3-13
最后登录
2015-3-12

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币

现有一list对象dm, 内容如下,

[[1]]

[1] "V1" "V2""V3" "V4" "V5" "V6" "V7""V8"

[[2]]

[1] "V1" "V3"

[[3]]

[1] "V3" "V5""V6"

[[4]]

[1] "V1" "V2""V4" "V7" "V8" "V9"

[[5]]

[1] "V3" "V7"

[[6]]

[1] "V8"  "V9"

>typeof(dm)

[1] “list”

>typeof(dm[1])

[1] “list”

>typeof(dm[[1]])

[1] “character”

>typeof(dm[[1]][1])

[1] “character”

欲实现如下功能:1、选出出现次数最多的元素,本处为V1(出现3次);2、删除V1所在的集合,本处删除[[1]],[[2]],[[4]],此时dm剩下[[3]],[[5]],[[6]]3、重复以上步骤,即在[[3]],[[5]],[[6]]中再次找到出现次数最多V3,然后删除[[3]],[5]],如果最后剩余的各元素出现次数相同,则取第一个元素(本处最后取到V8),直至dmNULL

事实上,length(dm)20多万,有无高效的实现方法?用循环基本慢的出不了结果了。

多谢各位指教了。


二维码

扫码加我 拉你入群

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

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

关键词:请教高手 R语句 Character length type character 程序 元素

沙发
yywan0913 在职认证  发表于 2015-1-20 11:55:31 |只看作者 |坛友微信交流群
  1. # 1
  2. m=names(which.max(table(unlist(dm))))  # 明明这里是V3
  3. # 2
  4. dm=dm[-grep(m,dm)]
复制代码


循环

使用道具

藤椅
yywan0913 在职认证  发表于 2015-1-20 12:04:20 |只看作者 |坛友微信交流群
  1. dm=list(paste("V",1:8,sep=""),c('V1','V3'),c('V3','V5','V6'),paste("V",c(1,2,4,7:9),sep=""),c("V3","V7"),c("V8","V9"))
  2. v=c()
  3. repeat{
  4. if(length(dm)==0|max(table(unlist(dm)))==1){print(v); break}else{
  5. m=names(which.max(table(unlist(dm))))
  6. dm=dm[-grep(m,dm)]
  7. v=c(v,m)
  8. }
  9. }
复制代码


循环不了多少次吧

使用道具

板凳
yukuang 发表于 2015-1-20 14:20:23 |只看作者 |坛友微信交流群
yywan0913 发表于 2015-1-20 11:55
循环
多谢兄台指教。但是我在执行unlist(dm)时,碰到了“ cannot allocate vector of size 598.6Mb"。。有无良策?

使用道具

报纸
曲散人终 发表于 2015-1-20 15:11:15 |只看作者 |坛友微信交流群
yukuang 发表于 2015-1-20 14:20
多谢兄台指教。但是我在执行unlist(dm)时,碰到了“ cannot allocate vector of size 598.6Mb"。。有无良 ...
那就是电脑内存不够了。。。好像没有什么好的办法。。。

使用道具

地板
yukuang 发表于 2015-1-20 15:40:02 |只看作者 |坛友微信交流群
曲散人终 发表于 2015-1-20 15:11
那就是电脑内存不够了。。。好像没有什么好的办法。。。
兄台,可用ff或其它方式实现否?

使用道具

7
曲散人终 发表于 2015-1-20 16:27:10 |只看作者 |坛友微信交流群
yukuang 发表于 2015-1-20 15:40
兄台,可用ff或其它方式实现否?
我不知道。。。这种情况一般都是你的数据太大而你的内存太小导致的,一般都是找一个内存大的电脑。。。其他的方法好像效果不好。。。这是硬件设施了。。。

使用道具

8
yukuang 发表于 2015-1-23 22:07:10 |只看作者 |坛友微信交流群
yywan0913 发表于 2015-1-20 12:04
循环不了多少次吧
感谢兄台。如果我把dm中的各元素前面的“V”去掉,使它们变成integer型,那么这行
dm=dm[-grep(m,dm)]
的效果怎么实现?

使用道具

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

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-5-22 17:18