楼主: cxnv
1046 9

[问答] 求问如何得到j的值 [推广有奖]

  • 0关注
  • 0粉丝

高中生

20%

还不是VIP/贵宾

-

威望
0
论坛币
13 个
通用积分
3.0000
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
458 点
帖子
12
精华
0
在线时间
23 小时
注册时间
2018-4-15
最后登录
2020-5-3

相似文件 换一批

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
导入csv如下:  A  B  C

  1  a  0

  2  b  0
  3  c  0
  4  d  1
  5  e  0
  6  f   0
  7  g  1
  8  h  0
  9  i   1
现在我想得到C列中连续2次以上包括2次为0的数目 设为j
C列前三行连续为0 那么到此时j=1
从第五行开始又连续两次为0 此时j=2
之后再也没有连续2次以上包括2次为0的了
所以前九行我得到的j=2

求问如何利用r在1000行数据中得到j的值{:2_25:}
二维码

扫码加我 拉你入群

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

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

关键词:如何利用 行数据

沙发
jalonso 发表于 2018-7-30 08:50:35 |只看作者 |坛友微信交流群
之前编了一个差不多的,你这个比他的感觉还简单点,大概说下思路吧:
  1. for(i in 1:1000){
  2.   if(如果当前位是0){
  3.     temp0<-temp0+1 #计0的计数器   
  4.   }
  5.   else{
  6.     if(temp0>=2){temp2<-temp2+1 #计j的计数器}
  7.     两个计数器清零;  
  8.   }

  9. }
复制代码

只说了思路不保证没有bug。。。
可以参考我之前的回答https://bbs.pinggu.org/forum.php?mod=viewthread&tid=6549154
已有 2 人评分论坛币 热心指数 收起 理由
逐梦的太阳 + 5 热心帮助其他会员
cheetahfly + 10 热心帮助其他会员

总评分: 论坛币 + 10  热心指数 + 5   查看全部评分

使用道具

为什么我根据你的条件算出来,前9行j=3呀

使用道具

板凳
cxnv 发表于 2018-7-31 13:25:05 |只看作者 |坛友微信交流群
jalonso 发表于 2018-7-30 08:50
之前编了一个差不多的,你这个比他的感觉还简单点,大概说下思路吧:

只说了思路不保证没有bug。。。
> temp0<-0
> j<-0
> for(i in 1:1000){
+   if(five[]==0){
+     temp0<-temp0+1 #计0的计数器   
+   }
+   else{
+     if(temp0>=16){
+       j<-j+1}   #计j的计数器
+     else{temp0<-0}##两个计数器清零;  
+     }
+   }
> j
[1] 0

不行呀 &#128546; 麻烦看看我哪里错了

是这样的

屏幕快照 2018-07-31 13.26.31.png (34.49 KB)

屏幕快照 2018-07-31 13.26.31.png

使用道具

报纸
cxnv 发表于 2018-7-31 13:25:51 |只看作者 |坛友微信交流群
陈小瓜的丝瓜 发表于 2018-7-30 22:09
为什么我根据你的条件算出来,前9行j=3呀
额 我的意思是前三行算一个 第五行到第六行算一个 其他就没了

使用道具

地板
jalonso 发表于 2018-8-2 15:49:45 |只看作者 |坛友微信交流群
cxnv 发表于 2018-7-31 13:25
> temp0 j for(i in 1:1000){
+   if(five[]==0){
+     temp0=16){
  1. data_c<-c(0,0,0,1,0,0,1,0,1)
  2. temp0<-0
  3. temp2<-0
  4. for(i in 1:length(data_c)){
  5.   if(data_c[i]==0){
  6.     temp0<-temp0+1
  7.   }
  8.   else{
  9.     if(temp0>=2){temp2<-temp2+1}
  10.     temp0<-0
  11.   }
  12. }
  13. print(temp2)
复制代码

使用道具

7
hifinecon 发表于 2018-8-2 16:57:16 |只看作者 |坛友微信交流群
thanks for solution

使用道具

cxnv 发表于 2018-7-31 13:25
额 我的意思是前三行算一个 第五行到第六行算一个 其他就没了
嗯,我用你的第一列和第三列结合写了个傻瓜循环,亲测可用,为了测试准确性,数据框稍微有点变化。
  1. df <- data.frame(A = c(1:12), B = letters[1:12], C = c(0,0,0,0,0,1,1,0,0,1,0,1))
  2. j <- 0
  3. for (i in 1:length(df$A[df$C == 1])){
  4.   if (i == 1){
  5.     if (df$A[df$C == 1][i] >= 2){j <- j + 1}
  6.   } else{
  7.     if (df$A[df$C == 1][i] - df$A[df$C == 1][i-1] > 2){j <- j + 1}
  8.     if (df$A[df$C == 1][i] - df$A[df$C == 1][i-1] <= 2){j <- j}
  9.   }
  10. }
  11. print(j)
复制代码

使用道具

9
cxnv 发表于 2018-8-4 16:28:04 |只看作者 |坛友微信交流群
陈小瓜的丝瓜 发表于 2018-8-2 21:39
嗯,我用你的第一列和第三列结合写了个傻瓜循环,亲测可用,为了测试准确性,数据框稍微有点变化。
大佬厉害六六六!!!谢谢大佬!!!!

使用道具

10
wangfs111222 发表于 2018-8-5 12:27:06 |只看作者 |坛友微信交流群
rle(x)$lengths[rle(x)$lengths>=2]

使用道具

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

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-28 01:18