如果我在R中有一个数据集,如下所示:

ProjName,ProjLevel,Budget
Proj1,Hardware,$100
,Software,$100
,Total,$200
Proj2,Hardware,$200
,Software,$300
,Other,$400
,Total,$900
...
...

我希望数据看起来像这样:
ProjName,ProjLevel,Budget
Proj1,Hardware,$100
Proj1,Software,$100
Proj1,Total,$200
Proj2,Hardware,$200
Proj2,Software,$300
Proj2,Other,$400
Proj2,Total,$900

我不确定这是否是最佳方法。理想情况下,我想要每个项目的“总”预算金额。我以为也许可以在列上使用apply(),但不确定执行任务的最佳方法。

谢谢,
o

最佳答案

如果不使用其他程序包,我将使用循环并将空单元格替换为先前的非空单元格

my.table <-read.table(text="ProjName,ProjLevel,Budget
Proj1,Hardware,$100
,Software,$100
,Total,$200
Proj2,Hardware,$200
,Software,$300
,Other,$400
,Total,$900", header=TRUE, as.is=TRUE,sep = ",")

for (i in 1:nrow(my.table)){
if(my.table[i,1]=="") my.table[i,1] <-my.table[i-1,1]
}

给出:
> my.table
  ProjName ProjLevel Budget
1    Proj1  Hardware   $100
2    Proj1  Software   $100
3    Proj1     Total   $200
4    Proj2  Hardware   $200
5    Proj2  Software   $300
6    Proj2     Other   $400
7    Proj2     Total   $900

要按项目获取总金额:
my.table[my.table$ProjLevel=="Total",]

  ProjName ProjLevel Budget
3    Proj1     Total   $200
7    Proj2     Total   $900

07-26 04:11