首页 > 解决方案 > with() 函数内的脚本没有数据帧输出

问题描述

我需要从主数据框的子集创建一个新的计算辅助数据框。想到的最好的主意是下面的脚本,但是没有输出……哈哈!

set.seed(124)
avg_sum <- data.frame(diag_grp= c("benign", "malignant", "mixed"),
                         cc_ttl_avg= runif(3, min=10000, max=15000),
                         cc_ttl_drct_avg= runif (3, min=7000, max=10000),
                         cc_drct_srg_avg= runif (3, min=5000, max=7000),
                         cc_prof_drct_avg= runif (3, min=2000, max=5000),
                         cc_tech_drct_avg= runif (3, min=2000, max=5000),
                         dummy1= runif (3, min=1000, max=15000),
                         dummy2= runif (3, min=1000, max=15000),
                         dummy3= runif (3, min=1000, max=15000))


with(subset(avg_sum, diag_grp=="benign"),  
     {
     benign_avg_sum <-
       data.frame(rbind(c(key= "cc_ttl_avg", value= 
             paste(as.character(trunc(cc_ttl_avg/cc_ttl_drct_avg*100)), "% TDC", sep="")),
         c(key= "cc_ttl_drct_avg", value= 
             paste(as.character(trunc(cc_ttl_drct_avg/cc_ttl_drct_avg*100)), "% TDC", sep="")),
         c(key= "cc_drct_srg_avg", value= 
             paste(as.character(trunc(cc_drct_srg_avg/cc_ttl_drct_avg*100)), "% TDC", sep="")),
         c(key= "cc_prof_drct_avg", value= 
             paste(as.character(trunc(cc_prof_drct_avg/cc_ttl_drct_avg*100)), "% TDC", sep="")),
         c(key= "cc_tech_drct_avg", value= 
             paste(as.character(trunc(cc_tech_drct_avg/cc_ttl_drct_avg*100)), "% TDC", sep=""))))

     })

预期的输出应该是如下所示的数据框:

               key    value
1       cc_ttl_avg 127% TDC
2  cc_ttl_drct_avg 100% TDC
3  cc_drct_srg_avg  75% TDC
4 cc_prof_drct_avg  34% TDC
5 cc_tech_drct_avg  52% TDC

标签: rdataframe

解决方案


您需要在with.

set.seed(124)
avg_sum <- data.frame(diag_grp= c("benign", "malignant", "mixed"),
                      cc_ttl_avg= runif(3, min=10000, max=15000),
                      cc_ttl_drct_avg= runif (3, min=7000, max=10000),
                      cc_drct_srg_avg= runif (3, min=5000, max=7000),
                      cc_prof_drct_avg= runif (3, min=2000, max=5000),
                      cc_tech_drct_avg= runif (3, min=2000, max=5000),
                      dummy1= runif (3, min=1000, max=15000),
                      dummy2= runif (3, min=1000, max=15000),
                      dummy3= runif (3, min=1000, max=15000))


benign_avg_sum <- with(subset(avg_sum, diag_grp=="benign"),  
     {
     data.frame(rbind(c(key= "cc_ttl_avg", value= 
                          paste(as.character(trunc(cc_ttl_avg/cc_ttl_drct_avg*100)), "% TDC", sep="")),
                      c(key= "cc_ttl_drct_avg", value= 
                          paste(as.character(trunc(cc_ttl_drct_avg/cc_ttl_drct_avg*100)), "% TDC", sep="")),
                      c(key= "cc_drct_srg_avg", value= 
                          paste(as.character(trunc(cc_drct_srg_avg/cc_ttl_drct_avg*100)), "% TDC", sep="")),
                      c(key= "cc_prof_drct_avg", value= 
                          paste(as.character(trunc(cc_prof_drct_avg/cc_ttl_drct_avg*100)), "% TDC", sep="")),
                      c(key= "cc_tech_drct_avg", value= 
                          paste(as.character(trunc(cc_tech_drct_avg/cc_ttl_drct_avg*100)), "% TDC", sep=""))))

     })

print(benign_avg_sum)
#>                key    value
#> 1       cc_ttl_avg 127% TDC
#> 2  cc_ttl_drct_avg 100% TDC
#> 3  cc_drct_srg_avg  75% TDC
#> 4 cc_prof_drct_avg  34% TDC
#> 5 cc_tech_drct_avg  52% TDC

reprex 包(v0.3.0)于 2019 年 7 月 31 日创建


推荐阅读