0

こんにちは、下のデータフレームに行を挿入するためにまとめたユーティリティ関数があります。式を手で書いていたら、次のようなものを入れます

newframe=rbind(oldframe[1:rownum,],row_to_insert=row_to_insert,oldframe[(rownum+1:nrow(oldframe),]に名前を付けrow_to_insertます。誰かが関数でこれを行う方法を教えてもらえますか?

ありがとう

insertrows=function (x, y, rownum) 
{
    newframe = rbind(y[1:rownum, ], x, y[(rownum + 1):nrow(y), 
        ])
    return(data.frame(newframe))
}

以下に追加されたいくつかの基礎となるデータのMWE

financials=data.frame(sales=c(100,150,200,250),some.direct.costs=c(25,30,35,40),other.direct.costs=c(15,25,25,35),indirect.costs=c(40,45,45,50))

oldframe=t(financials)
colnames(oldframe)=make.names(seq(2000,2003,1))

total.direct.costs=oldframe['some.direct.costs',]+oldframe['other.direct.costs',]
newframe=total.direct.costs

n=rownum=3
oldframe=insertrows(total.direct.costs=newframe,oldframe,n)
4

2 に答える 2

2

特定の質問に答えるために、変更すると関数が機能します。

return(data.frame(newframe))

return(newframe)

ただし、より適切な質問は、なぜこれを行いたいのかということです。より簡単な (そしてより良い) アプローチは、データ フレームを結合することです。

 dd = rbind(x, y)

次に、いくつかの変数でソートします

于 2012-10-31T09:12:55.717 に答える
1

この変更された関数を試してください:

insertrows <- function (x, oldframe, rownum) 
{
  newframe <- rbind(oldframe, x)
  rownames(newframe) <- c(rownames(oldframe),  deparse(substitute(x)))
  return(newframe[c(seq(n), nrow(oldframe) + 1, seq(n + 1, nrow(oldframe))), ])
}

これで、引数として渡されたオブジェクトの名前がx、新しい行 ( deparse(substitute(x))) の行名として使用されます。古い行名は保持されます。さらに、行の順序付けがより効率的になりました。

関数を実行します。

insertrows(total.direct.costs, oldframe, 3)

出力:

                   [,1] [,2] [,3] [,4]
sales               100  150  200  250
some.direct.costs    25   30   35   40
other.direct.costs   15   25   25   35
total.direct.costs   40   55   60   75
indirect.costs       40   45   45   50
于 2012-10-31T16:58:38.453 に答える