在R

2014-03-04 48 views
0

中获取未知数量的唯一行的中值,请提前致谢以获取帮助。我用了一系列包含以下格式的数据的.csv文件的工作:在R

ID<-c(1,1,1,1,2,2,3,3,3,4,4,4,4,5,5,6,7,7) 
Length<-c(3,3,4,7,6,4,7,8,8,9,3,2,4,3,6,8,5,3) 
dummydata<-cbind(ID,Length) 

dummydata<-cbind(ID,Length) 

> dummydata 
     ID Length 
[1,] 1  3 
[2,] 1  3 
[3,] 1  4 
[4,] 1  7 
[5,] 2  6 
[6,] 2  4 
[7,] 3  7 
[8,] 3  8 
[9,] 3  8 
[10,] 4  9 
[11,] 4  3 
[12,] 4  2 
[13,] 4  4 
[14,] 5  3 
[15,] 5  6 
[16,] 6  8 
[17,] 7  5 
[18,] 7  3 

我需要做的就是找到每个唯一编号(1,2,3等)的平均长度。我可以用下面的代码单独做到这一点:

one<-median(dummydata[dummydata$ID=="1","Length"]) 
two<-median(dummydata[dummydata$ID=="2","Length"]) 
three<-median(dummydata[dummydata$ID=="3","Length"]) 

然而,在每一个.csv文件,有成千上万的ID,并建立每个号码上面的代码是不可行的。有没有一种方法可以找到整个数千个数据集的每个唯一ID号的中位长度?理想情况下,我可以用这些中值创建一个新列。

我将不胜感激这个问题!

+1

这是一个简单的拆分申请,结合问题。请参阅http://stackoverflow.com/q/11562656/892313但使用中位数而非平均值。 –

回答

3

看看tapply

例如:

with(as.data.frame(dummydata), tapply(Length,list(ID),median)) 
# 1 2 3 4 5 6 7 
# 3.5 5.0 8.0 3.5 4.5 8.0 4.0 
2

一个dplyr解决方案:

library(dplyr) 

as.data.frame(dummydata) %.% group_by(ID) %.% summarise(Median = median(Length))