在 R 中使用 rbind 创建数据框
Creating data frame with rbind in R
我正在尝试使用 R 创建 7 个 table 并在嵌套的 for 循环中使用 'rbind' 将它们放在一起。但是 table 中的数据不完整,只有最后添加的数据集在 table.
中
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))
}
}
}
创建的table '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>
不知何故,它没有正确地将行添加到 table(最后一个除外),所以我认为错误一定在
中的某处
'assign(paste0("df_",i),rbind(paste0("df_",i),df_add))'
.
我认为它缺少 'get' 函数
assign(paste0("df_",i),rbind(paste0("df_",i),df_add))
应该变成:
assign(paste0("df_",i),rbind(get(paste0("df_",i)),df_add))
希望对您有所帮助
戈塔维亚诺尼
我正在尝试使用 R 创建 7 个 table 并在嵌套的 for 循环中使用 'rbind' 将它们放在一起。但是 table 中的数据不完整,只有最后添加的数据集在 table.
中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))
}
}
}
创建的table '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>
不知何故,它没有正确地将行添加到 table(最后一个除外),所以我认为错误一定在
中的某处'assign(paste0("df_",i),rbind(paste0("df_",i),df_add))'
.
我认为它缺少 'get' 函数
assign(paste0("df_",i),rbind(paste0("df_",i),df_add))
应该变成:
assign(paste0("df_",i),rbind(get(paste0("df_",i)),df_add))
希望对您有所帮助
戈塔维亚诺尼