我需要找到以下最小值:
Product Year
N1 1988
N2 1986
N1 2008
N1 2008
N2 1999
N2 2007
我想查找使用 RScript 首次列出的产品年份。例如产品 N1 于 1988 年首次上市。产品 N2 于 1986 年首次上市。同样我必须为 500000 个产品做。
有不同的可能性:aggregate
、tapply
或by
。
dat <- read.table(text = " Product Year
N1 1988
N2 1986
N1 2008
N1 2008
N2 1999
N2 2007", header = TRUE)
aggregate(Year ~ Product, dat, min)
Product Year
1 N1 1988
2 N2 1986
with(dat, tapply(Year, Product, min))
N1 N2
1988 1986
with(dat, by(Year, Product, min))
Product: N1
[1] 1988
--------------------------------------------------------------------------------
Product: N2
[1] 1986
这在 R 中非常简单。尝试:
dframe = read.table(text=" Product Year
N1 1988
N2 1986
N1 2008
N1 2008
N2 1999
N2 2007", header=T)
lapply(split(dframe$Year, dframe$Product), FUN=min)
$N1
[1] 1988
$N2
[1] 1986
这里的关键函数是?split和?lapply。 split()
按产品组分解数据框并返回列表列表。 lapply()
将函数min()
应用于每个列表,并返回由相关列表(产品)索引的输出。