首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >按组添加ID列

按组添加ID列
EN

Stack Overflow用户
提问于 2012-11-26 22:10:37
回答 4查看 16.9K关注 0票数 21

我想在R中创建一个基于纬度和经度两列的唯一ID,以便重复的位置具有相同的集群ID。

例如:

代码语言:javascript
复制
LAT        LONG    Cluster_ID
13.5330 -15.4180   1
13.5330 -15.4180   1
13.5330 -15.4180   1
13.5330 -15.4180   1
13.5330 -15.4170   2
13.5330 -15.4170   2
13.5330 -15.4170   2
13.5340 -14.9350   3
13.5340 -14.9350   3
13.5340 -15.9170   4
13.3670 -14.6190   5
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-11-26 22:22:12

这里有一种使用interaction的方法。

代码语言:javascript
复制
d <- read.table(text='LAT LONG
13.5330 -15.4180 
13.5330 -15.4180 
13.5330 -15.4180 
13.5330 -15.4180 
13.5330 -15.4170 
13.5330 -15.4170 
13.5330 -15.4170 
13.5340 -14.9350 
13.5340 -14.9350 
13.5340 -15.9170 
13.3670 -14.6190', header=TRUE)

d <- transform(d, Cluster_ID = as.numeric(interaction(LAT, LONG, drop=TRUE)))

#       LAT    LONG Cluster_ID
# 1  13.533 -15.418          2
# 2  13.533 -15.418          2
# 3  13.533 -15.418          2
# 4  13.533 -15.418          2
# 5  13.533 -15.417          3
# 6  13.533 -15.417          3
# 7  13.533 -15.417          3
# 8  13.534 -14.935          4
# 9  13.534 -14.935          4
# 10 13.534 -15.917          1
# 11 13.367 -14.619          5

编辑:整合了@Spacedman的建议,向interaction提供drop=TRUE

票数 26
EN

Stack Overflow用户

发布于 2012-11-26 22:24:10

数据:

代码语言:javascript
复制
dat <- read.table(text="
LAT        LONG
13.5330 -15.4180
13.5330 -15.4180
13.5330 -15.4180
13.5330 -15.4180
13.5330 -15.4170
13.5330 -15.4170
13.5330 -15.4170
13.5340 -14.9350
13.5340 -14.9350
13.5340 -15.9170
13.3670 -14.6190", header = TRUE)

这些命令创建以1开头的id变量:

代码语言:javascript
复制
comb <- with(dat, paste(LAT, LONG))
within(dat, Cluster_ID <- match(comb, unique(comb)))

输出:

代码语言:javascript
复制
      LAT    LONG Cluster_ID
1  13.533 -15.418          1
2  13.533 -15.418          1
3  13.533 -15.418          1
4  13.533 -15.418          1
5  13.533 -15.417          2
6  13.533 -15.417          2
7  13.533 -15.417          2
8  13.534 -14.935          3
9  13.534 -14.935          3
10 13.534 -15.917          4
11 13.367 -14.619          5
票数 13
EN

Stack Overflow用户

发布于 2012-11-27 12:52:04

data.table 1.8.3中添加了.GRP,允许您执行以下操作:

代码语言:javascript
复制
# Your data, as a data.frame
dat <- read.table(text='LAT LONG
13.5330 -15.4180 
13.5330 -15.4180 
13.5330 -15.4180 
13.5330 -15.4180 
13.5330 -15.4170 
13.5330 -15.4170 
13.5330 -15.4170 
13.5340 -14.9350 
13.5340 -14.9350 
13.5340 -15.9170 
13.3670 -14.6190', header=TRUE)

# Convert it to a data.table
# with keys as the combination of LAT and LONG
library(data.table)
DT <- data.table(dat, key="LAT,LONG")
DT[, Cluster_ID:=.GRP, by=key(DT)]
DT
#        LAT    LONG Cluster_ID
#  1: 13.367 -14.619          1
#  2: 13.533 -15.418          2
#  3: 13.533 -15.418          2
#  4: 13.533 -15.418          2
#  5: 13.533 -15.418          2
#  6: 13.533 -15.417          3
#  7: 13.533 -15.417          3
#  8: 13.533 -15.417          3
#  9: 13.534 -15.917          4
# 10: 13.534 -14.935          5
# 11: 13.534 -14.935          5
票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13566562

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档