在R中使用rbind创建数据框

时间:2018-04-03 09:22:05

标签: r rbind

我正在尝试用R创建7个表,并在嵌套的for循环中使用'rbind'将它们组合在一起。但是,表中的数据不完整,只有最后添加的数据集在表中。

matrixbox<-function(x,y){
  df<-subset(y,X2D.CODE==x)
  res<-sapply(df$STORAGE,function(z){length(unlist(strsplit(as.character(z),",")))-1})
  res_count<-sum(res)
  df_res<-data.frame(Matrixboxnr=as.character(x),TYPE=as.character(df$TYPE[1]),Count=res_count,prmdiag=as.character(df$ORIGIN[1]),stringsAsFactors=FALSE)
  print(df_res)
  return(df_res)
}

lc_exports<-c("citrat","csf","csf_shock","edta","serum_clot","serum_wo","urin")
    for(i in lc_exports){
      assign(paste0("df_",i),data.frame(Matrixboxnr=character(),TYPE=character(),Count=numeric(),prmdiag=character(),stringsAsFactors=FALSE))
      print(i)
      for(j in unique(na.omit(x_bl_delc$Matrixboxnr))){
        print(j)
        if(j %in% get(i)$X2D.CODE){
          df_add<-matrixbox(j,get(i))
          assign(paste0("df_",i),rbind(paste0("df_",i),df_add))
        }
      }
    }

创建的表'df_urin'例如仅包含2个对象:

>   Matrixboxnr TYPE                      Count     prmdiag 
> 1 df_urin     df_urin                   df_urin   df_urin
> 2 106100      Urine 500 µl - Matrixbox  12        NA

虽然它实际上应该包含

[1] "142082"
  Matrixboxnr                     TYPE Count prmdiag
1      142082 Urine 500 �l - Matrixbox    12    <NA>
[1] "105713"
  Matrixboxnr                     TYPE Count prmdiag
1      105713 Urine 500 �l - Matrixbox    12    <NA>
[1] "101051"
  Matrixboxnr                     TYPE Count prmdiag
1      101051 Urine 500 �l - Matrixbox    12    <NA>
[1] "146912"
  Matrixboxnr                     TYPE Count prmdiag
1      146912 Urine 500 �l - Matrixbox    12    <NA>
[1] "147254"
  Matrixboxnr                     TYPE Count prmdiag
1      147254 Urine 500 �l - Matrixbox    12    <NA>
[1] "146072"
  Matrixboxnr                     TYPE Count prmdiag
1      146072 Urine 500 �l - Matrixbox    12    <NA>
[1] "103269"
  Matrixboxnr                     TYPE Count prmdiag
1      103269 Urine 500 �l - Matrixbox    12    <NA>
[1] "106100"
  Matrixboxnr                     TYPE Count prmdiag
1      106100 Urine 500 �l - Matrixbox    12    <NA>

不知何故,它没有核心地将行添加到表中(除了最后一行),所以我认为错误必须在某处

  

'分配(paste0( “DF _”,i)中,rbind(paste0( “DF _”,i)中,df_add))'

1 个答案:

答案 0 :(得分:1)

我认为它错过了“获取”功能

 assign(paste0("df_",i),rbind(paste0("df_",i),df_add))

应该成为:

 assign(paste0("df_",i),rbind(get(paste0("df_",i)),df_add))

希望这会有所帮助

Gottavianoni