使用双循环在 R 中创建子集

Creating a subset in R using a double loop

我有一个非常大的 csv 文件,我已经导入到 R 中,需要制作一个数据子集。 csv 看起来像这样:

Julian_Day   Id   Year
52            1   1901
56            5   1901
200           1   1968         

等,其中年份是 1901-2010,Id 1-58 和 Julian_Day 1-200 大约 130,000 行数据。所以我只想要每个 Id 每年的最低 Julian Day 值,并删除所有其他数据行。

数据:

df = data.frame(Year=c(1901,1901,1968,1901),
                Id=c(1,5,1,1),
                Julian_Day=c(52,56,200,40),
                Animal=c('dog','doggy','style','fashion'))

试试这个:

library(data.table)
setDT(df)[ ,min:=min(Julian_Day), by=list(Id, Year)]
#>df
#   Year Id Julian_Day  Animal min
#1: 1901  1         52     dog  40
#2: 1901  5         56   doggy  56
#3: 1968  1        200   style 200
#4: 1901  1         40 fashion  40

或者简单地使用基数 R

aggregate(Julian_Day ~., df, min)
#   Year Id Julian_Day
# 1 1901  1         40
# 2 1968  1        200
# 3 1901  5         56

或者

library(dplyr)
df %>%
  group_by(Id, Year) %>%
  summarise(Julian_Day = min(Julian_Day))

# Source: local data frame [3 x 3]
# Groups: Id
# 
#   Id Year Julian_Day
# 1  1 1901         40
# 2  1 1968        200
# 3  5 1901         56