获取单个数字的列表并获得没有公共分组变量的范围

时间:2019-01-22 20:31:45

标签: r for-loop if-statement

我正在研究一个非常大的data.frame,其中有几个用于个人。我需要做的是获取每个人的数字范围。我的数据集大约有500,000行的6列,并且我想保留一些额外的信息。我提供了data.frame设置的摘要版本。预先感谢!

我所拥有的是一列ID和一列数字(例如:1-500)。每个ID都有与之关联的不同数量的数字:

ID        Number    Group    Date

A          1          K      1-19-2019
A          2          K      1-19-2019
A          3          K      1-19-2019
A          4          K      1-19-2019
A          5          K      1-19-2019
A          6          K      1-19-2019
B          10         K      1-19-2019
B          11         K      1-19-2019
C          12         J      1-19-2019
C          13         J      1-19-2019 
C          14         J      1-19-2019
C          15         J      1-19-2019
C          16         J      1-19-2019
A          20         K      1-20-2019
A          21         K      1-20-2019
A          22         K      1-20-2019
A          23         K      1-20-2019

我需要什么:

ID    Min  Max   Group   Date
A     1    6      K      1-19-2019
A     20   23     K      1-19-2019
B     10   11     K      1-19-2019
C     12   16     J      1-20-2019

我尝试了一些事情,包括:

  • 在dplyr中分组

    test <-data %>%
    group_by(ID)%>%
    top_n(n=1))
    
  • 套用并合并

    max<- tapply(data$Number, tags.I$ID, max)
    min<- tapply(data$Number, tags.I$ID, min)
    test2 <- full_join(min, max, by=ID)
    

我从test1得到的是原始数据集。 Test2可以运行,但是如果有ID重复,则会错过。

1 个答案:

答案 0 :(得分:0)

我将使用data.table包:

library(data.table)
data <- as.data.table(data)
test <- data[, .(Min=min(Number), Max=max(Number)), by=.(ID,Group,Date)]

最好!