全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 R语言论坛
4744 11
2014-09-14
悬赏 50 个论坛币 已解决
a1<-data.frame(a=1:20,b=c(0,3,9,2,3,4,5,1,3,5,7,8,5,3,2,1,3,5,7,8))
a2<-subset(a1,a1[2]>4)

a3<-data.frame(a=1,b=1)
for(i in 1:9){
   a4<-a2[i,]
   print(0)
   if(a2[i,1]==i){
         a3<-rbind(a3,a4)
          print(1)}
   if(a2[i,1]>i){
         b<-a2[i,1]-i
         print(2)
         for(j in 1:b){
              a4[2]<-0
              a4[1]<-i
              print("e")
              a3<-rbind(a3,a4)}}
   }
以上是运行语句,我想用a2生成a3  还原a1(补充值赋值为0),求教,为什么if语句判断失效,直接顺序运行了?按行合并数据,为什么a3  的行变量名会出现奇怪的数字呀?

最佳答案

daishen 查看完整内容

混50论坛币下点资料。 library(data.table) a1 = data.table(a=1:20,b=c(0,3,9,2,3,4,5,1,3,5,7,8,5,3,2,1,3,5,7,8)) setkey(a1,a) a2 = a1 a3 = a2[a1][,list(a,b)] a3 a3 a b 1: 1 0 2: 2 0 3: 3 9 4: 4 0 5: 5 0 6: 6 0 7: 7 5 8: 8 0 9: 9 0 10: 10 5 11: 11 7 12: 12 8 13: 13 5 14: 14 0 15: 15 0 16: 16 0 17: 17 0 18: 18 5 19: 19 7 20: 20 8
二维码

扫码加我 拉你入群

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

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

全部回复
2014-9-14 10:13:13
混50论坛币下点资料。

library(data.table)
a1 = data.table(a=1:20,b=c(0,3,9,2,3,4,5,1,3,5,7,8,5,3,2,1,3,5,7,8))
setkey(a1,a)
a2 =  a1[b > 4]
a3 = a2[a1][,list(a,b)]
a3[is.na(b),b:= 0]
a3
     a b
1:  1 0
2:  2 0
3:  3 9
4:  4 0
5:  5 0
6:  6 0
7:  7 5
8:  8 0
9:  9 0
10: 10 5
11: 11 7
12: 12 8
13: 13 5
14: 14 0
15: 15 0
16: 16 0
17: 17 0
18: 18 5
19: 19 7
20: 20 8
二维码

扫码加我 拉你入群

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

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

2014-9-14 10:15:18
[1] 0
[1] 2
[1] "e"
[1] "e"
[1] 0
[1] 2
[1] "e"
[1] "e"
[1] "e"
[1] "e"
[1] "e"
[1] 0
[1] 2
[1] "e"
[1] "e"
[1] "e"
[1] "e"
[1] "e"
[1] "e"
[1] "e"
[1] 0
[1] 2
[1] "e"
[1] "e"
[1] "e"
[1] "e"
[1] "e"
[1] "e"
[1] "e"
[1] 0
[1] 2
[1] "e"
[1] "e"
[1] "e"
[1] "e"
[1] "e"
[1] "e"
[1] "e"
[1] 0
[1] 2
[1] "e"
[1] "e"
[1] "e"
[1] "e"
[1] "e"
[1] "e"
[1] "e"
[1] 0
[1] 2
[1] "e"
[1] "e"
[1] "e"
[1] "e"
[1] "e"
[1] "e"
[1] "e"
[1] "e"
[1] "e"
[1] "e"
[1] "e"
[1] 0
[1] 2
[1] "e"
[1] "e"
[1] "e"
[1] "e"
[1] "e"
[1] "e"
[1] "e"
[1] "e"
[1] "e"
[1] "e"
[1] "e"
[1] 0
[1] 2
[1] "e"
[1] "e"
[1] "e"
[1] "e"
[1] "e"
[1] "e"
[1] "e"
[1] "e"
[1] "e"
[1] "e"
[1] "e"

运行过程生成的 print,循环运行了9次,if没起到作用!?
二维码

扫码加我 拉你入群

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

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

2014-9-14 10:42:04
代码太长,没有注释,所以没看完。但开头的a2<-subset(a1,a1[2]>4)是不是有问题,里面应该是a1[,2]吧?少了个逗号?
二维码

扫码加我 拉你入群

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

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

2014-9-14 11:14:13
ofzhengyi 发表于 2014-9-14 10:42
代码太长,没有注释,所以没看完。但开头的a24)是不是有问题,里面应该是a1[,2]吧?少了个逗号?
不好意思  第一次发,所有不知道怎么问!


a1<-data.frame(a=1:20,b=c(0,3,9,2,3,4,5,1,3,5,7,8,5,3,2,1,3,5,7,8))#建立数据框a1 含有 a  b#
a2<-subset(a1,a1[,2]>4)        #取出a1中b大于4的数据存为a2#

a3<-data.frame(a=1,b=1)      #建立a3#
for(i in 1:9){               # str(a2)有9个数据,循环9次#
   a4<-a2[i,]                #中间变量a4,只有一行#
   print(0)
   if(a2[i,1]==i){             #判断 a2中a的第i行与i的是否相等,为真 吧a4与a3合并#
         a3<-rbind(a3,a4)
          print(1)}              #打印1#
   if(a2[i,1]>i){                #判断若a2的 i行a 是否大于 i,若大于为真,建立新循环,循环a2 a的第i行与 j差值的次数#
         b<-a2[i,1]-i
         print(2)
         for(j in 1:b){
              a4[2]<-0
              a4[1]<-i
              print("e")
              a3<-rbind(a3,a4)}}   #循环合并到a3#
   }


二维码

扫码加我 拉你入群

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

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

2014-9-14 11:17:34
ofzhengyi 发表于 2014-9-14 10:42
代码太长,没有注释,所以没看完。但开头的a24)是不是有问题,里面应该是a1[,2]吧?少了个逗号?
我就想吧  a3  变成
   
a3  
   a   b
1  1   0
2  2   0
3  3   9
4  4   0
5  5   0
6  6   0
7  7   5
8  8   0
9  9   0
10 10  5
11 11  7
12 12  8
13 13  5
18 18  5
19 19  7
20 20  8

二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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