【问题标题】:RScript and statistics to find minRScript 和统计找到最小值
【发布时间】:2013-05-12 15:21:18
【问题描述】:

我需要找到以下的最小值:

  Product Year
   N1     1988
   N2     1986
   N1     2008
   N1     2008
   N2     1999
   N2     2007

我想查找使用 RScript 首次列出的产品是哪一年。比如 N1 产品是 1988 年首次上市的,N2 产品是 1986 年首次上市的。同样我要为 500000 个产品做。

【问题讨论】:

  • 你尝试了什么?你搜索了什么?

标签: r rscript


【解决方案1】:

有不同的可能性: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

【讨论】:

  • library(plyr); ddply(dd,"Product",summarise,minYear=min(Year))
  • 只是好奇:你觉得有理由更喜欢其中一个吗? (或者,如果这样更好,我可以提出一个新问题。)
  • 我相信 SO 上已经有很多问题可以对这些选项进行基准测试,还有data.table 解决方案,例如stackoverflow.com/questions/14048739/r-use-ddply-or-aggregate/…
【解决方案2】:

这在 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() 应用于每个列表,并返回由相关列表(产品)索引的输出。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-05
    • 1970-01-01
    • 2023-03-09
    相关资源
    最近更新 更多