对于R中具有依赖关系的数据表中的循环?

时间:2014-02-03 06:57:07

标签: r

我想更新以下数据表:

DT1 :(我根据输入需要编辑的数据表列值)

BIC         BCC1    BCC2    BCC6    BCC8    BCC9    BCC10   BCC11
990081899A  0   1   0   0   0   0   0
9900023620  0   1   1   0   0   0   0
9900427160  0   1   0   0   0   0   0
990064457TA 1   1   0   0   0   0   0
990066595A  0   0   0   1   0   0   1
990088248A  0   0   0   1   0   0   1
990088882C1 0   0   0   1   0   0   1
990088882C2 0   0   0   1   1   0   0
990088882C3 0   0   0   1   1   0   1
990088882C4 0   0   0   0   1   0   1
990088882C5 0   0   0   0   1   0   1

我想遍历除第一列之外的DT1列名,以检查我的输入和任何列名是否相等。如果它们相等,则检查该列的所有行(如果该值等于1)。如果是,则将该行的其他一些列值设置为等于0.

我现在正在这样做:

>Hierarchy <- function(Dt, cc, Hier){
Dt_cols<-setdiff(names(Dt), "HIC")
Dt_rows<-1:nrow(Dt)
for(j in 1:length(Dt_cols)){
if(Dt_cols[j] == cc){
  for(i in 1:length(Dt_rows)){
    if(eval(parse(text = paste("Dt[",i,",",eval(Dt_cols[j]),"]"))) == 1){
      for(k in 1:length(Hier)){
        if(Dt_cols[j] == Hier[k]){
          hierVar<-as.character(eval(Dt_cols[j]));
          Dt[i,hierVar]<- 0
          }}}}}}return(Dt)}

如果我将以下参数传递给此函数:

>Hierarchy(DT1,"BCC8", c("BCC9","BCC10","BCC11","BCC12"))

Result should be:

BIC         BCC1    BCC2    BCC6    BCC8    BCC9    BCC10   BCC11
990081899A  0   1   0   0   0   0   0
9900023620  0   1   1   0   0   0   0
9900427160  0   1   0   0   0   0   0
990064457TA 1   1   0   0   0   0   0
990066595A  0   0   0   1   0   0   0
990088248A  0   0   0   1   0   0   0
990088882C1 0   0   0   1   0   0   0
990088882C2 0   0   0   1   0   0   0
990088882C3 0   0   0   1   0   0   0
990088882C4 0   0   0   0   1   0   0
990088882C5 0   0   0   0   1   0   0

但是这个功能不能正常工作。我无法找到另一种方式或正确的做法。任何建议表示赞赏。谢谢!

0 个答案:

没有答案