2012-08-10 47 views
0

这实际上是前一个问题的延续,在每个位置更改与多个元素一个数据帧:在数据帧

Spline on multiple factors in data frame

所以道歉,通过第一部分再次去。相信我,我试图解决自己!

因此,一些样本数据:

mydf<- data.frame(c("a","a","b","b","c","c"),c("e","e","e","e","e","e") 
       ,as.numeric(c(1,2,3,10,20,30)), 
       as.numeric(c(5,10,20,20,15,10))) 

给一些名字:

colnames(mydf)<-c("Model", "Class","Seconds", "Speed") 

这给:

> mydf 
    Model Class Seconds Speed 
1  a  e  1  5 
2  a  e  2 10 
3  b  e  3 20 
4  b  e  10 20 
5  c  e  20 15 
6  c  e  30 10 

现在本来我需要花键这个数据和答案是好心给出为:

library("plyr") 
ddply(mydf, .(Model), summarise, Spline = spline(x = Seconds, y = Speed)) 

这就造成:

Model      Spline 
1  a 1.0, 1.2, 1.4, 1.6, 1.8, 2.0 
2  a    5, 6, 7, 8, 9, 10 
3  b 3.0, 4.4, 5.8, 7.2, 8.6, 10.0 
4  b  20, 20, 20, 20, 20, 20 
5  c  20, 22, 24, 26, 28, 30 
6  c  15, 14, 13, 12, 11, 10 

正如一个方面说明我甚至不能手动创建R中这一确切结构,以提供一个例子,即使是手!

所以回到问题。我需要改变结果,所以他们看起来像这样:

Model Seconds Speed 
a  1.0  5 
a  1.2  6 
a  1.4  7 
a  1.6  8 
a  1.8  9 
a  2.0  10 
b  3.0  20 
b  4.4  20 
b  5.8  20 
b  7.2  20 
b  8.6  20 
b  10.0 20 
c  20  15 
c  22  14 
c  24  13 
c  26  12 
c  28  11 
c  30  10 

感谢您的任何帮助!

回答

3

你的意思是这样的:

foo <- function(x){ 
    Spline <- spline(x = x$Seconds, y = x$Speed) 
    data.frame(Seconds = Spline$x,Speed = Spline$y) 
} 
out <- ddply(mydf, .(Model),foo) 

现在,你可能会问自己, “怎么没joran明白这一点?”在我读这个问题之前,因为我没有模糊的概念spline返回。

所以我的第一站是?spline,我跳到价值部分,在那里我发现:

花键返回包含分量x和y给出坐标,其中插值发生和列表内插值。

啊哈!因此,对于ddply发送给我们尚未写入功能的每个数据块,它需要将这两个组件列表并将它们简单地转换为数据帧,以便ddply可以轻松地将事物重新拼接在一起。

因此,我写的是通过简单的拟合spline模式开出一个功能:

Spline <- spline(x = x$Seconds, y = x$Speed) 

,然后取结果并将其打包成数据帧:

data.frame(Seconds = Spline$x,Speed = Spline$y) 
1

这也许应该是但它太大了,所以(如今天早些时候关于列表中元素的列表中的问题所示)我正在回答有关如何创建“手动”结构的子问题:

x <- data.frame(Model = rep(letters[1:3] , each=2)) 
x$Spline <- list( list(1.0, 1.2, 1.4, 1.6, 1.8, 2.0), 
        list(5, 6, 7, 8, 9, 10), 
        list(3.0, 4.4, 5.8, 7.2, 8.6, 10.0), 
        list(20, 20, 20, 20, 20, 20), 
        list(15, 14, 13, 12, 11, 10)) 
x 
#------------------ 
    Model      Spline 
1  a 1.0, 1.2, 1.4, 1.6, 1.8, 2.0 
2  a    5, 6, 7, 8, 9, 10 
3  b 3.0, 4.4, 5.8, 7.2, 8.6, 10.0 
4  b  20, 20, 20, 20, 20, 20 
5  c  20, 22, 24, 26, 28, 30 
6  c  15, 14, 13, 12, 11, 10 
+0

那么x $样条嵌套列表? – user1181337 2012-08-10 18:20:17

+0

这是一个可能的名字。列表是递归结构,因此它们可以包含列表的列表,以及列表的列表,以及....非常漂亮,所以你可以“一路下来”。 – 2012-08-10 18:35:24