全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 R语言论坛
1604 9
2013-12-07
下面是代码,数据框data3中包含了数据框data的十行数据,我想把数据框data3中和数据框data一样的十行数据删除掉,要怎么做?
x<-c(0,40)
y<-c(0,40)
par(bg="gray")
plot(x,y,type="n",xlab="",ylab="")
for(x in 0:40){for(y in 0:40)
rect(x-.5,y-.5,x+.5,y+.5)}
points(c(15,24),c(18,20),pch=21,bg="yellow")
x[1]=15
y[1]=18
x2=24
y2=20
m=max(abs(y2-y[1]),abs(x2-x[1]))
n=m+1
addy=(y2-y[1])/m
addx=(x2-x[1])/m
i=2
for(i in 2:n){x[i]=x[1]+(i-1)*addx
y[i]=y[1]+(i-1)*addy
y[i]=round(y[i])}
data<-data.frame(y=y,x=x)
data2=data.frame(x=NULL,Y=NULL)
for(i in 1:10){x<-rep(c((data[i,]$x-1):(data[i,]$x+1)),3)
y<-rep(c((data[i,]$y-1):(data[i,]$y+1)),each=3)
data1<-data.frame(y=y,x=x)
for(j in 1:9){if (sqrt((data1[j,]$x-data[i,]$x)^2+(data1[j,]$y-data[i,]$y)^2)<=1)
{rect(data1[j,]$x-.5,data1[j,]$y-.5,data1[j,]$x+.5,data1[j,]$y+.5,col="green")
data2=data.frame(rbind(data2,data1[j,]))
}}}
data3=unique(data2)
data3
    y  x
2  17 15
4  18 14
5  18 15
6  18 16
8  19 15
21 17 16
61 18 17
81 19 16
22 17 17
62 18 18
82 19 17
53 19 18
63 19 19
83 20 18
24 18 19
64 19 20
84 20 19
25 18 20
65 19 21
85 20 20
26 18 21
66 19 22
86 20 21
57 20 22
67 20 23
87 21 22
28 19 23
68 20 24
88 21 23
29 19 24
69 20 25
89 21 24
data
    y  x
1  18 15
2  18 16
3  18 17
4  19 18
5  19 19
6  19 20
7  19 21
8  20 22
9  20 23
10 20 24

二维码

扫码加我 拉你入群

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

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

全部回复
2013-12-7 20:47:34
我用了这个,感觉就还差一点就可以了。即把10组提出来,这只是最后一组被删除的代码。
for(i in 1:dim(data)[1]){
  for(j in 1:dim(data3)[1]){
    if(data3[j,1]==data[i,1]&data3[j,2]==data[i,2])
       data4=data3[-j, ]
  }
}
二维码

扫码加我 拉你入群

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

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

2013-12-7 21:44:12
a = apply(data3, 1, function(x){
  for(i in 1:nrow(data)){
    return(all(x!=data[i,]))
  }
})
data3[a,]
二维码

扫码加我 拉你入群

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

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

2013-12-7 22:20:57
熊小贤 发表于 2013-12-7 21:44
a = apply(data3, 1, function(x){
  for(i in 1:nrow(data)){
    return(all(x!=data))
非常感谢。
二维码

扫码加我 拉你入群

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

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

2013-12-7 23:58:55
熊小贤 发表于 2013-12-7 21:44
a = apply(data3, 1, function(x){
  for(i in 1:nrow(data)){
    return(all(x!=data))
这个是有问题的,return返回的值是 循环第一次的值。
##apply 后面插 for 循环的。其实真的是绕。

。。。。想修改 改的头大

直接apply apply
复制代码

二维码

扫码加我 拉你入群

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

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

2013-12-8 19:55:55
jmpamao 发表于 2013-12-7 23:58
这个是有问题的,return返回的值是 循环第一次的值。
##apply 后面插 for 循环的。其实真的是绕。
这个代码虽然很恶心,却也实现了功能。
b=NULL
for(i in 1:dim(data)[1]){
  for(j in 1:dim(data3)[1]){
    if(data3[j,1]==data[i,1]&data3[j,2]==data[i,2])
       b=c(b,j)
         }
}
data4=data3[-b, ]
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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