如果我在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()但不确定接近任务的最佳方法。
谢谢, 抛
答案 0 :(得分:3)
如果不使用其他软件包,我会使用循环并将空单元格替换为先前的非空单元格
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
答案 1 :(得分:3)
如果您使用na.strings = ""
读取数据,则可以使用 zoo 包中的na.locf
函数以最新的非填充缺失值遗失了一个:
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 = ",",na.strings = "")
my.table$ProjName <- na.locf(my.table$ProjName)
> 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