您好我有一个实用程序函数,我将它们放在一起,将行插入到下面的数据框中。如果我手工写出公式,我会提出像
这样的东西 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)
答案 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