如何将行名称引入R中的函数

时间:2012-10-31 08:54:37

标签: r user-defined-functions

您好我有一个实用程序函数,我将它们放在一起,将行插入到下面的数据框中。如果我手工写出公式,我会提出像

这样的东西

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)

2 个答案:

答案 0 :(得分:2)

要回答您的具体问题,如果您更改了以下功能,您的功能将会起作用:

return(data.frame(newframe))

return(newframe)

然而,一个更相关的问题是为什么你想这样做?一种更简单(更好)的方法是组合数据框:

 dd = rbind(x, y)

然后对某个变量进行排序

答案 1 :(得分: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)))的rowname。保留旧的rownames。此外,行的排序现在更有效。

运行功能:

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