R:根据两个不同的变量创建ID

时间:2018-11-30 11:51:32

标签: r grouping

我是一个尝试使用R的初学者,但是经常碰壁。

我有一个庞大的数据集(成千上万个条目),看起来像这样:有一个用于纬度,经度和PlotCode的列。

Table

每个经度​​和纬度有多个图。我想为具有相同纬度和经度的所有图创建一个具有某种ID的新列。

最终会是这样的:

Table 2

有什么建议吗?谢谢。

3 个答案:

答案 0 :(得分:1)

欢迎您!最好在问题中添加数据,所需的输出,尝试等。但是,也许您可​​以使用软件包dplyr找到解决方案。

安装后,您可以执行以下操作:

library(dplyr)
  # some data like yours
    data_latlon <- data.frame(Lat = c(1,1,1,2,2,2,3,3,3)
                              , Long = c(45,45,45,12,12,12,23,23,23)
                              , PlotCode = c('a','a','a','b','b','b','c','c','c'))

data_latlon %>%                                            # the pipe operator to have dplyr chains                                      
group_by(Lat,Long) %>%                                     # group by unique Lat and Long
summarise(PlotCodeGrouped = paste(PlotCode,collapse=''))   # add a new column that collapse all the plot,
                                                           # you can specify how to separate 
                                                           # with the collapse option, in 
                                                           # this case nothing
# A tibble: 3 x 3
# Groups:   Lat [?]
    Lat  Long PlotCodeGrouped
  <dbl> <dbl> <chr>          
1     1    45 aaa            
2     2    12 bbb            
3     3    23 ccc  

编辑

您想要的结果代码更简单:

data_latlon %>%                         # the pipe operator to have dplyr chains                                      
  group_by(Lat,Long, add=TRUE)          # group by unique Lat and Long
                                        # and add a ""hierarchical father"

# Groups:   Lat, Long [3]
    Lat  Long PlotCode
  <dbl> <dbl> <fct>   
1    1.   45. a       
2    1.   45. a       
3    1.   45. a       
4    2.   12. b       
5    2.   12. b       
6    2.   12. b       
7    3.   23. c       
8    3.   23. c       
9    3.   23. c   

答案 1 :(得分:1)

我想我找到了解决方案,我需要的是称为集群ID的东西。

dataframe <- transform(dataframe, Cluster_ID = as.numeric(interaction(Lat, Long, drop=TRUE)))

答案 2 :(得分:0)

按分组的意思是按PlotCode排序/排列它们?

如果可以,则可以使用排序功能,也可以通过以下方式使用排序功能 tidyverse / dplyr软件包