使用双循环在 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
我有一个非常大的 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