楼主: 小洋仔
4195 11

[问答] 大神们,泪求请帮我看看数据框取子集的问题怎么搞? [推广有奖]

  • 2关注
  • 0粉丝

大专生

95%

还不是VIP/贵宾

-

威望
0
论坛币
30 个
通用积分
1.0600
学术水平
5 点
热心指数
9 点
信用等级
5 点
经验
409 点
帖子
51
精华
0
在线时间
49 小时
注册时间
2013-10-11
最后登录
2016-3-20

楼主
小洋仔 学生认证  发表于 2013-12-17 15:31:46 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
请帮我看看数据框取子集的问题怎么搞?
data4是包含三列的数据框,我想知道这个数据框中x和y值都一样的行数是哪几行?(此时不考虑father值)例如七行和九行值一样,就得到七和九的行数。这里应该有三组是一样的,应返回六个下标。
> data4
    y  x father
2  17 15      1
4  18 14      1
8  19 15      1
21 17 16      2
81 19 16      2
22 17 17      3
62 18 18      3
82 19 17      3
23 18 18      4
43 19 17      4
83 20 18      4
24 18 19      5
84 20 19      5
25 18 20      6
85 20 20      6
26 18 21      7
66 19 22      7
86 20 21      7
27 19 22      8
47 20 21      8
87 21 22      8
28 19 23      9
88 21 23      9
29 19 24     10
69 20 25     10
89 21 24     10
代码是
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,father=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,father=rep(NA,9))
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")
data1[j,]$father=i
data2=data.frame(rbind(data2,data1[j,]))
}
data3=unique(data2)
}}
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, ]

二维码

扫码加我 拉你入群

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

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

关键词:数据框 Father Data FATH The father

回帖推荐

jmpamao 发表于6楼  查看完整内容

你试试这个

本帖被以下文库推荐

沙发
ywh19860616 发表于 2013-12-17 15:38:05
  1. x=c(1,2,3,4,5,6,7,8,9,10)
  2. y=c(10,9,8,7,6,5,4,8,9,10)
  3. data=data.frame(x=x,y=y)
  4. which(data$x==data$y)
  5. [1]  8  9 10
复制代码
这样吗?
一份耕耘,一份收获。

藤椅
小洋仔 学生认证  发表于 2013-12-17 15:46:09
ywh19860616 发表于 2013-12-17 15:38
这样吗?
不是,是i行中的x和y分别等于j行中的x和y值。得到i 和 j的行号

板凳
小洋仔 学生认证  发表于 2013-12-17 15:46:41
ywh19860616 发表于 2013-12-17 15:38
这样吗?
谢谢回帖。

报纸
yywan0913 在职认证  发表于 2013-12-17 17:55:36
我怎么发现了四组?
是什么给了你自信

地板
jmpamao 发表于 2013-12-17 17:59:55
你试试这个
  1. data5=data4[duplicated(data4[,c(1,2)])+duplicated(data4[,c(1,2)],fromLast=T)>0,]
  2. rownames(data5)
复制代码
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
ywh19860616 + 1 + 1 + 1 精彩帖子

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

7
jmpamao 发表于 2013-12-17 20:23:04
多亏了你这个问题,让我想起了之前的一个问题-如何去除子集相同的行
想到更好的解法
https://bbs.pinggu.org/thread-2771067-1-1.html

8
熊小贤 发表于 2013-12-18 09:01:29
x <- c(15, 14, 15, 16, 16, 17, 18, 17, 18, 17, 18, 19, 19, 20, 20, 21, 22, 21, 22, 21, 22, 23, 23, 24, 25, 24)
y <- c(17, 18, 19, 17, 19, 17, 18, 19, 18, 19, 20, 18, 20, 18, 20, 18, 19, 20, 19, 20, 21, 19, 21, 19, 20, 21)
h <- data.frame(x=x, y=y)
attach(h)
a=as.numeric(paste(y,x,sep=""))
b <- c()
for (i in 1:nrow(h)){
  if (a [ i]  %in%  a[-i])
    b <- c(b,i)
}
h[b,]


已有 2 人评分学术水平 热心指数 信用等级 收起 理由
jmpamao + 1 + 1 paste 暴力利器,
ywh19860616 + 1 + 1 + 1 精彩帖子

总评分: 学术水平 + 2  热心指数 + 2  信用等级 + 1   查看全部评分

9
小洋仔 学生认证  发表于 2013-12-18 09:20:51
熊小贤 发表于 2013-12-18 09:01
x
,结果有点出入。应该是循环下的问题。谢谢

10
小洋仔 学生认证  发表于 2013-12-18 10:10:07
jmpamao 发表于 2013-12-17 17:59
你试试这个
问题已解决。

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

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