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 回答