楼主: yywan0913
4403 17

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

11
yywan0913 在职认证  发表于 2013-10-17 10:41:41
求证1加1 发表于 2013-10-17 09:15
重点不在你的那个字母,那个我考到R里的时候就已经顺手改了,关键是你的循环。。。。劳烦lz把自己跑成功的 ...
还是算了    一回复后,代码就变了           还是我自己想办法,不行了就调用其他语言了
是什么给了你自信

12
yywan0913 在职认证  发表于 2013-10-17 16:49:51
lanyajia 发表于 2013-10-17 16:03
问题:比如说 1:5,7:9,12:13 length的话是10,但我想知道的是(5-1)+(9-7)+(13-12) =7

上面例子可以 ...
好像是这个  谢谢
是什么给了你自信

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

上面例子可以 ...
如果是  a <-c(1:2,3:4,5:6)
这种情况又不行了

step size 为1 怎么判断这种情况 ?

14
lanyajia 发表于 2013-10-17 22:30:03
为什么会不行呢?

需要将问题定义清楚

a <-c(1:2,3:4,5:6)

关键是将a向量看作是1个区间(1,2,3,4,5,6)还是看作3个区间(1,2; 3,4; 5,6)

如果是看作1个区间,则区间跨度应该为5,用sum(diff(a)==1)即可得到.

如果是看作3个区间,则区间跨度之和为(2-1)+(4-3)+(6-5)=3,这种情况下数据的组织显然不应该采用一个向量的格式,而应该采用数组或数据框的方式,否则实现起来会相当费劲。

15
yywan0913 在职认证  发表于 2013-10-18 09:31:19
lanyajia 发表于 2013-10-17 22:30
为什么会不行呢?

需要将问题定义清楚
那什么  你说得对
那个如果a=c(1,2,8)
b=c(5,7,10)
怎么不用循环实现 d=c(1:5,2:7,8:10)啊   谢谢
是什么给了你自信

16
zhangyangsmith 发表于 2013-10-19 05:19:47
yywan0913 发表于 2013-10-18 09:31
那什么  你说得对
那个如果a=c(1,2,8)
b=c(5,7,10)
Use "mapply":
  1. unlist(mapply(":", c(1, 2, 8), c(5, 7, 10)))
  2. # [1]  1  2  3  4  5  2  3  4  5  6  7  8  9 10
复制代码

17
lanyajia 发表于 2013-10-20 12:03:08
问题:那个如果a=c(1,2,8),b=c(5,7,10)。怎么不用循环实现 d=c(1:5,2:7,8:10)啊

如果数据组织成这种形式,那实现(5-1)+(7-2)+(10-8)=11就很直接了。

a=c(1,2,8)
b=c(5,7,10)
sum(b-a)
[1] 11

18
yywan0913 在职认证  发表于 2013-10-21 08:33:25
zhangyangsmith 发表于 2013-10-19 05:19
Use "mapply":
对 对 就是这个  谢谢   记起来了
是什么给了你自信

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

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