如何计算R中向量中按顺序排列的相同元素的数量?
发布时间:2020-12-15 05:12:35 所属栏目:Java 来源:网络整理
导读:我有一个像这样的矢量: x -c(1,1,-1,1) 我希望算法产生一个向量(3,6,2,7,1) 这意味着3个“1”,1个“-1”,6个“1”等… 我已经开发了以下算法,但它不适用于每个向量x,这可能是我将要有的. y-c(0)q=0z=0w=0e=1if (x[1]==1){q-abs(sum(x[1:(min(which(x 0))-1)
我有一个像这样的矢量:
x< -c(1,1,-1,1) 我希望算法产生一个向量(3,6,2,7,1) 这意味着3个“1”,1个“-1”,6个“1”等… 我已经开发了以下算法,但它不适用于每个向量x,这可能是我将要有的. y<-c(0) q=0 z=0 w=0 e=1 if (x[1]==1) { q<-abs(sum(x[1:(min(which(x < 0))-1)])) y[e]<-q k=q+1 z<-abs(sum(x[k:min(which(x < 0))])) e=e+1 y[e]<-z k=k+z r<-matrix(c(which(x < 0))) w<-matrix(c(which(x > 0))) while( k<22 ) { if( all(r<k) ) { z<-sum(x[k:22]) e=e+1 y[e]<-z k=k+z }else { z<-abs(sum(x[k:min(r[which(r > k)]-1)])) e=e+1 y[e]<-z k=k+z } if( all(w<k) ) { z<-abs(sum(x[k:22])) e=e+1 y[e]<-z k=k+z }else {z<-abs(sum(x[k:min(w[which(w > k)]-1)])) e=e+1 y[e]<-z k=k+z } }} 但对于矢量 您是否有任何想法更快更容易地做到这一点或只是在我自己的代码中找到问题? 谢谢你们! 解决方法
你可以试试功能:
rle(x) #Run Length Encoding # lengths: int [1:7] 3 1 6 2 2 7 1 # values : num [1:7] 1 -1 1 -1 1 -1 1 所以rle(x)$length为你提供你想要的东西: rle(x)$lengths #[1] 3 1 6 2 2 7 1 @clemlaflemme函数和rle之间的效率比较: library(microbenchmark) x <- rep(x,5000) microbenchmark(clem_shift(),cath_rle(),clem_cumul(),unit="relative") #Unit: relative # expr min lq mean median uq max neval cld # clem_shift() 1.000000 1.00000 1.0000000 1.000000 1.000000 1.0000000 100 a # cath_rle() 1.181513 1.13419 0.8552573 1.095478 1.041918 0.9483564 100 a # clem_cumul() 325.480391 284.14827 170.1371421 265.160409 241.954976 54.5240969 100 b (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- java – 使用readline()时’run’和’debug’的不同输出
- java.lang.NoClassDefFoundError: org/springframework/cor
- java – 重载方法如何工作?
- java – 是否可以将参数传递给Enum值?
- Java使用Deque实现堆栈的方法
- 远程mysql_java.sql.SQLException: null, message from ser
- java-蛮力最长的通用子序列
- 异常: The server time zone value 'ÖÐ
- 如何更新Prim的算法的堆中的元素优先级?
- java – 使用HTTPHandler上传文件