在å¦ä¸€ä¸ªå‘é‡å†…çš„å‘é‡çš„å‘é‡åŒ–中应用函数

时间:2014-03-28 21:31:51

标签: r

å¹´
1999 1999 1999 2003 2003 2005 2005 2005 2005 2007 2009 2009

A1
15 7 24 6 65 5 89 56 21 15 19 7 23

上表显示了一个数æ®æ¡†ã€‚我想è¦ä¸€ä¸ªçŸ¢é‡ï¼Œè®©æˆ‘们说" median1"其中a1中这些值的中值对应于æ¯å¹´ã€‚而且我知é“,使用for循环很容易,但我正在å°è¯•æ‰¾åˆ°ä¸€ä¸ªçŸ¢é‡åŒ–的'基于解决方案。

4 个答案:

答案 0 :(得分:1)

如果data.table被称为data.frame

,请使用DF个包

library(data.table)
DT = data.table(DF)
DT[,median(a1),by='year']

答案 1 :(得分:1)

使用ave这是一个R基函数。将ave与transform结åˆèµ·æ¥ï¼Œæ‚¨å°†èŽ·å¾—éžå¸¸å¥½çš„输出。考虑dat是您的data.frame

> transform(dat, Median= ave(a1, year, FUN=median))
  year a1 Median
1 1999 20   15.0
2 1999 15   15.0
3 1999 11   15.0
4 2003 11    7.0
5 2003  3    7.0
6 2007 89   40.5
7 2007 25   40.5
8 2007 56   40.5
9 2007 12   40.5

如果您æ¯å¹´åªæƒ³è¦ä¸€ä¸ªç”±ä¸­ä½æ•°ç»„æˆçš„å‘é‡ï¼Œæ‚¨å¯ä»¥è¿™æ ·åšï¼š

> with(dat, ave(a1, year, FUN=median))
[1] 15.0 15.0 15.0  7.0  7.0 40.5 40.5 40.5 40.5

答案 2 :(得分:1)

在基础R中,您å¯ä»¥è¿™æ ·åšï¼š

foo <- data.frame(
  year=c(1999,1999,1999,2003,2003,2005,2005,2005,2005,2007,2009,2009,2009),
  A1=c(15,7,24,6,65,5,89,56,21,15,19,7,23))
by(foo$A1,foo$year,median)

严格æ¥è¯´ï¼Œç»“æžœä¸æ˜¯vector,但你å¯ä»¥è§£å†³è¿™ä¸ªé—®é¢˜ï¼š

as.vector(by(foo$A1,foo$year,median))
当你想通过å°ç»„进行æ“作时,

by()总是有用。

答案 3 :(得分:0)

我ä¸æ¸…楚,但似乎你想è¦æ¯å¹´çš„中ä½æ•°ï¼Ÿå¦‚果是的è¯......

## set up the data
> year <- c(1999,1999,1999,2003,2003,2005,2005,2005,2005,2007,2009,2009,2009)
> A1 <- c(15, 7, 24, 6, 65, 5, 89, 56, 21, 15, 19, 7, 23)
> dd <- data.frame(year, A1)

## solution
> xx <- c(do.call(cbind, lapply(split(dd, dd$year), function(x) median(x$A1))))
> names(xx) <- unique(dd$year)
> xx
1999 2003 2005 2007 2009 
15.0 35.5 38.5 15.0 19.0