0

これは実際には前の質問の続きです:

データフレーム内の複数の要素にスプラインを付ける

ですから、最初の部分をもう一度やり直してしまったことをお詫びします。そして、私が自分自身を解決しようとしたと信じてください!

したがって、いくつかのサンプルデータ:

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

助けてくれてありがとう!

4

2 に答える 2

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 )

さて、あなたは「ジョランはどうやってそれを理解したのか」と自問しているかもしれません。私がこの質問を読む前に、私は何splineが戻ったのか最も霧深い概念を持っていませんでした。

だから私の最初のストップはでした、そして私は私が見つけるのセクション?splineにスキップします:

splineは、補間が行われた縦座標と補間された値を示すコンポーネントxとyを含むリストを返します。

あはは!したがって、まだ書き込まれていない関数に送られるデータのチャンクごとにddply、2つのコンポーネントのリストを取得し、それらをデータフレームに変換するだけで、ddply簡単に元に戻すことができます。

splineしたがって、モデルを単純にフィッティングすることから始まる関数を記述します。

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

次に、結果を取得してデータフレームにパッケージ化します。

data.frame(Seconds = Spline$x,Speed = Spline$y) 
于 2012-08-10T04:38:42.967 に答える
1

これはおそらくコメントであるはずですが、大きすぎるので(列の要素としてのリストに関するr-helpに関する今日の以前の質問に示されているように)、その構造を「手動で」作成する方法についてのサブ質問に答えています。 :

 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
于 2012-08-10T05:05:44.487 に答える