全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 R语言论坛
4302 17
2013-10-16
悬赏 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 不知是否你想要的?
二维码

扫码加我 拉你入群

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

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

全部回复
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

不知是否你想要的?
二维码

扫码加我 拉你入群

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

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

2013-10-16 18:20:27
首先 lz你给的代码貌似很有问题。。。因此并不是很理解你的问题。。。

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

那可以这样
复制代码
二维码

扫码加我 拉你入群

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

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

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轴后所占的长度
二维码

扫码加我 拉你入群

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

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

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()一下?
二维码

扫码加我 拉你入群

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

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

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()一下?
二维码

扫码加我 拉你入群

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

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

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群