由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Statistics版 - 请教如何在一数列中找出某个数值的最长连续个数
相关主题
[合集] 请教如何在一数列中找出某个数值的最长连续个数R question, calculate mean over some rows
问个R里面avoid for loop的问题(sapply,lapply...)【欢迎进来讨论】for loop in R
求助时间序列correlation的问题 (转载)问个R的问题
R问题请教。A question about R
请问R里apply和sapply有什么区别How can I do this in R?
如何把model fitting statistics 读出来(R)请教:如何能加速R codes 运行?
Dashagen请进请教一道 R 的题目, 谢谢
[R]有没有函数:根据字典翻译一个向量求问一个R apply 函数的问题
相关话题的讨论汇总
话题: int话题: ndata话题: 最长话题: sizeof话题: 连续
进入Statistics版参与讨论
1 (共1页)
k******a
发帖数: 816
1
比如说我有一串数列:
0 1 0 0 3 5 0 0 0 4
在这个数列里面一共有六个零,不过零的最长连续个数是三。
不知道excel里面能不能实现?我现在只能在excel里找到如何求某数值的总个数。
请各位高手赐教,sas 或者 r的做法也行,万分感谢!
s*****n
发帖数: 2174
2
你要找的目标数(你例子里面的0) 是已知的还是未知的?
比如(1, 0, 0, 0, 2, 2, 2, 2) 是要返回(最长连续"0"的)3
还是返回(最长连续"2"的)4.
比如你要是希望找最长的相同数段(2,2,2,2)的话
a <- c(1, 0, 0, 0, 2, 2, 2, 2)
find.consecutive.same <- function(t){
return(order(c(diff(a[t:length(a)]) == 0, F))[1])
}
max(sapply(1:(length(a) - 1), find.consecutive.same))
如果你要找连续的已知固定数, 比如找0的话.
a <- c(1, 0, 0, 0, 2, 2, 2, 2)
find.consecutive.same <- function(t){
return(order(a[t:length(a)] == 0)[1] - 1)
}
max(sapply(1:length(a), find.consecutive.same))
f***a
发帖数: 329
3
正好无聊发呆中,写了个function。
输入你的数据和你想找的那个数,结果返回那个数值的1)最长连续序列的长度;2)这
种序列在数据中的个数;3)每一个这种序列的位置;4)整个数据中“此数”和“非
此数”的详细分布情况
#Function Details
#"Size": indicates the number of elements in the longest segment
#"Number": indicates the number of the longest segment
#"Location" indicaties the location of 1st element in the longest
segment
#"Frequency": shows the frequency details of the data
# ("1"=the number you are checking, "0"=other numbers)
countforyou <- function(dat,num=1)
{
vec <- as.numeric(dat==n
k******a
发帖数: 816
4
你们太猛了!
请问有没有sas的做法
b******v
发帖数: 1493
5
可以用c或者r编程实现
假设数组存在a[]里
用两个数p,n分别记录当前最长连续子数组的起始位置和长度
然后用q,m分别记录当前连续数组的起始位置及长度
然后每进一个新的数a[i]进来,判断是否与a[q]相同
*如果相同,则m变成m+1
如果这时m比n大,则替换p为i,n为m
*如果不同,则q变成i,m变成1
等把数组扫描完了,p,n中就保存了你要的信息
这样这个算法的复杂度是O(N),其中N是数组长度

【在 k******a 的大作中提到】
: 比如说我有一串数列:
: 0 1 0 0 3 5 0 0 0 4
: 在这个数列里面一共有六个零,不过零的最长连续个数是三。
: 不知道excel里面能不能实现?我现在只能在excel里找到如何求某数值的总个数。
: 请各位高手赐教,sas 或者 r的做法也行,万分感谢!

f***a
发帖数: 329
6
你这样只能找到第一个最长序列的长度和位置,后面跟它一样长的序列都被忽略了,而
且如果那个数
不是你想找的数的话给出的结果错的。
譬如数据是: 1,1,1,2,2,2,2,3,3,3,1,1,1
想要找的是最长的连续“1”数列的位置
答案应该是:有2组“1,1,1”,位置分别是 1,11
你的方法给出的是:4 (“2,2,2,2”的位置)
所以应该是在做判断的时候把不是想找的数的情况都要剔除,而且要考虑最长序列有不
止一处的情
况。

【在 b******v 的大作中提到】
: 可以用c或者r编程实现
: 假设数组存在a[]里
: 用两个数p,n分别记录当前最长连续子数组的起始位置和长度
: 然后用q,m分别记录当前连续数组的起始位置及长度
: 然后每进一个新的数a[i]进来,判断是否与a[q]相同
: *如果相同,则m变成m+1
: 如果这时m比n大,则替换p为i,n为m
: *如果不同,则q变成i,m变成1
: 等把数组扫描完了,p,n中就保存了你要的信息
: 这样这个算法的复杂度是O(N),其中N是数组长度

b******v
发帖数: 1493
7
C++程序如下
#include
using namespace std;
int main()
{
int a[] = {0, 1, 0, 0, 3, 5, 0, 0, 0, 4};
int p,n,q,m;
p = 0;
n = 1;
q = 0;
m = 1;
int N = sizeof(a)/sizeof(int);
for(int i=1; i if(a[i]==a[q]) {
m=m+1;
if(m>n) {
p = q;
n = m;
}
}
else {
q = i;
m = 1;
}
}
cout << "starting position is " << p << endl;
cout <<

【在 b******v 的大作中提到】
: 可以用c或者r编程实现
: 假设数组存在a[]里
: 用两个数p,n分别记录当前最长连续子数组的起始位置和长度
: 然后用q,m分别记录当前连续数组的起始位置及长度
: 然后每进一个新的数a[i]进来,判断是否与a[q]相同
: *如果相同,则m变成m+1
: 如果这时m比n大,则替换p为i,n为m
: *如果不同,则q变成i,m变成1
: 等把数组扫描完了,p,n中就保存了你要的信息
: 这样这个算法的复杂度是O(N),其中N是数组长度

b******v
发帖数: 1493
8
sorry,好像楼主确实要的是某个数的最长连续序列

【在 b******v 的大作中提到】
: C++程序如下
: #include
: using namespace std;
: int main()
: {
: int a[] = {0, 1, 0, 0, 3, 5, 0, 0, 0, 4};
: int p,n,q,m;
: p = 0;
: n = 1;
: q = 0;

k******a
发帖数: 816
9
你们太猛了!
请问有没有sas的做法
k******a
发帖数: 816
10
谢谢各位的指导,
澄清一下
我想要的是某个确定数值的最长连续个数,而非所有数值中最长的。
f***a
发帖数: 329
11
C++ code如下。
输出结果对应我上面写的 R code, 不过我没把 detailed frequency显示出来。
#include
int main()
{
using namespace std;

int d[] = {1,1,1,2,2,1,1,2,2,1,1,1,3,3,3,1,1,1,3,2};
int num = 1;
int Ndata= sizeof d / sizeof d[0];
int n[Ndata];
int s[Ndata];
int l[Ndata];
int i=0;
n[i]=d[0]; s[i]=1; l[i]=1;
for (int k=1; k {
if(n[i]==d[k])
{
s[i]++;
}
else
{
i++; n[i]=d[k]; s[i]=1; l[i]=k+1;
}
}

in

【在 k******a 的大作中提到】
: 你们太猛了!
: 请问有没有sas的做法

f***a
发帖数: 329
12
需要的话我可以把matlab code也补上去
我只用 c++, matlab, R, 除非不可抗拒因素一般不用sas 。。。。。 :(
等用sas的进来补全sas code吧,呵呵

【在 k******a 的大作中提到】
: 你们太猛了!
: 请问有没有sas的做法

y****n
发帖数: 46
13
data old;
input x @@;
cards;
0 1 0 0 3 5 0 0 0 4
run;
data new;
set old;
by x notsorted;
if first.x then ct1=0;
ct1+1;
run;
proc sql;
create table test as
select x,count(*) as totct, max(ct1) as max_csct
from new
group by x;
quit;
1 (共1页)
进入Statistics版参与讨论
相关主题
求问一个R apply 函数的问题请问R里apply和sapply有什么区别
sas 提取变量问题请教,急! 如何把model fitting statistics 读出来(R)
请教SAS中数值变量的missing value转换Dashagen请进
Matlab求教 (转载)[R]有没有函数:根据字典翻译一个向量
[合集] 请教如何在一数列中找出某个数值的最长连续个数R question, calculate mean over some rows
问个R里面avoid for loop的问题(sapply,lapply...)【欢迎进来讨论】for loop in R
求助时间序列correlation的问题 (转载)问个R的问题
R问题请教。A question about R
相关话题的讨论汇总
话题: int话题: ndata话题: 最长话题: sizeof话题: 连续