楼主: yywan0913
4416 17

[问答] 区间长度计算问题 [推广有奖]

  • 0关注
  • 16粉丝

已卖:2份资源

副教授

28%

还不是VIP/贵宾

-

威望
0
论坛币
991 个
通用积分
224.6182
学术水平
150 点
热心指数
182 点
信用等级
87 点
经验
23610 点
帖子
673
精华
0
在线时间
912 小时
注册时间
2013-8-20
最后登录
2023-2-24

楼主
yywan0913 在职认证  发表于 2013-10-16 17:59:11 |AI写论文
3论坛币
例如a=c(1:5,2:7,9:12,14:15)
b=c[!duplicated(a)]  #去重复后为[1]1 2 3 4 5 6 7 9 10 11 12 14 15
我想知道b的每个区间的长度的和    故
m=1
for (i in length(b):2) {
  if (b[i]==b[i-1]) m=m+1
}
m                  
得到m=13
  问题是当数据小的时候这样运行数据还是挺快的,但当a的数据很大时,大概3的7次方的数据量,这样运行就很慢了,
我想知道有什么函数直接出来么,能避免用for的。谢谢。

最佳答案

lanyajia 查看完整内容

问题:比如说 1:5,7:9,12:13 length的话是10,但我想知道的是(5-1)+(9-7)+(13-12) =7 上面例子可以用非循环的方式来解决,如下: a=c(1:5,7:9,12:13) sum(diff(a)==1) [1] 7 不知是否你想要的?
关键词:计算问题 duplicate length leng For
是什么给了你自信

沙发
lanyajia 发表于 2013-10-16 17:59:12
问题:比如说 1:5,7:9,12:13 length的话是10,但我想知道的是(5-1)+(9-7)+(13-12) =7

上面例子可以用非循环的方式来解决,如下:

a=c(1:5,7:9,12:13)
sum(diff(a)==1)
[1] 7

不知是否你想要的?

藤椅
求证1加1 发表于 2013-10-16 18:20:27
首先 lz你给的代码貌似很有问题。。。因此并不是很理解你的问题。。。

根据你给的这个m=13,感觉应该是前两项做差求和吧应该是?那就是一阶差分求和?

那可以这样
  1. a=c(1:5,2:7,9:12,14:15);
  2. b=c[!duplicated(a)];
  3. sum(diff(b));
复制代码
个人主页,欢迎订阅http://chenangliu.info/

板凳
yywan0913 在职认证  发表于 2013-10-17 08:31:38
求证1加1 发表于 2013-10-16 18:20
首先 lz你给的代码貌似很有问题。。。因此并不是很理解你的问题。。。

根据你给的这个m=13,感觉应该是前 ...
a=c(1:5,2:7,9:12,14:15)
b=a[!duplicated(a)]
m=1
for(i in length(b):2{
if (b==b[i-1] m=m+1
}
m
是这个  输错了个字母。就是想知道得到的b在输入x轴后所占的长度
是什么给了你自信

报纸
求证1加1 发表于 2013-10-17 09:15:14
yywan0913 发表于 2013-10-17 08:31
a=c(1:5,2:7,9:12,14:15)
b=a[!duplicated(a)]
m=1
重点不在你的那个字母,那个我考到R里的时候就已经顺手改了,关键是你的循环。。。。劳烦lz把自己跑成功的代码直接copy过来吧

如果你指的是b在x轴中占得长度,窃以为用最大的减去最小的?

如果是一个元素占一个单位的话,length()一下?
个人主页,欢迎订阅http://chenangliu.info/

地板
求证1加1 发表于 2013-10-17 09:15:18
yywan0913 发表于 2013-10-17 08:31
a=c(1:5,2:7,9:12,14:15)
b=a[!duplicated(a)]
m=1
重点不在你的那个字母,那个我考到R里的时候就已经顺手改了,关键是你的循环。。。。劳烦lz把自己跑成功的代码直接copy过来吧

如果你指的是b在x轴中占得长度,窃以为用最大的减去最小的?

如果是一个元素占一个单位的话,length()一下?
个人主页,欢迎订阅http://chenangliu.info/

7
yywan0913 在职认证  发表于 2013-10-17 10:32:43
求证1加1 发表于 2013-10-17 09:15
重点不在你的那个字母,那个我考到R里的时候就已经顺手改了,关键是你的循环。。。。劳烦lz把自己跑成功的 ...
比如说 1:5,7:9 ,12:13 length的话是10,但我想知道的是(5-1)+(9-7)+(13-12)   =7
就是这个意思
是什么给了你自信

8
yywan0913 在职认证  发表于 2013-10-17 10:37:50
求证1加1 发表于 2013-10-17 09:15
重点不在你的那个字母,那个我考到R里的时候就已经顺手改了,关键是你的循环。。。。劳烦lz把自己跑成功的 ...
a=c(1:5,2:7,9:12,14:15)
b=a[!duplicated(a)]
m=0
for(i in length(b):2){
if (b-b[i-1]==1) m=m+1
}
m
[1]10
是什么给了你自信

9
yywan0913 在职认证  发表于 2013-10-17 10:38:58
yywan0913 发表于 2013-10-17 10:37
a=c(1:5,2:7,9:12,14:15)
b=a[!duplicated(a)]
m=0
a=c(1:5,2:7,9:12,14:15)
b=a[!duplicated(a)]
m=0
for(i in length(b):2){
if (b-b[i-1]==1) m=m+1
}
m
[1]10
这个
是什么给了你自信

10
yywan0913 在职认证  发表于 2013-10-17 10:40:01
yywan0913 发表于 2013-10-17 10:38
a=c(1:5,2:7,9:12,14:15)
b=a[!duplicated(a)]
m=0
a=c(1:5,2:7,9:12,14:15)
b=a[!duplicated(a)]
m=0
for(i in length(b):2){
if (b-b[i-1]==1) m=m+1
}
m
[1]10
晕   怎么一点回复就变了
是什么给了你自信

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

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