是否有R函数具有2个循环

时间:2019-08-19 10:18:44

标签: r

我有问题。最初,我在场景1中解决了它。场景1是我有一个数据帧df。我需要绘制数字变量的均值

         df
         A     B   C  D   E  F
 1       asd   29  sf 36  sf 44
 2       fsd   24 gfd 56 gfd 34
 3       gs    46 asd 39 asd 37
 4       asd   50 gfg 26 gfg 23
 5       sf    43  fg 56  fg 37
 6       dfg   29  er 35  er 51
 7       sdfg  32  tr 27  tr 28
 8      fgdsgd 24  qw 31  qw 36

我有一个代码可以绘制数字变量的均值。编码如下所示

 p2 <- list()
 cs <- names(Filter(is.numeric, df))
 for(i in cs)
 {
 p2[i] <- mean(df[,i])
 do.call(rbind,p2) %>% as.data.frame()
 }
 p2 <- as.data.frame(p2)
 p2 <- unlist(p2)
 p2 <- stack(p2)
 ggplot(data=p2,aes(x=ind,y=values))+geom_bar(stat = 
 "identity")+ylab("Mean")

但是我需要另一个循环。上面的情况仅是指。现在,我还需要中位数,标准差等等。所以我称这些功能为矢量

 gh <- list()
 mea <- c("mean","median","sd")
 p2 <- list()
 cs <- names(Filter(is.numeric, df))
 for(i in cs)
 {
 for(j in mea)
 {
  p2[i] <- gh[[j]](df[i])
 do.call(rbind,p2) %>% as.data.frame()
 }
  }
 p2 <- as.data.frame(p2)
 p2 <- unlist(p2)
 p2 <- stack(p2)
 ggplot(data=p2,aes(x=ind,y=values))+geom_bar(stat = 
 "identity")+ylab("Mean")

您能帮助我构建上述情况2吗?

因此理想情况下,它应该为所有数字变量绘制均值,中位数和sd

1 个答案:

答案 0 :(得分:0)

这是我如何使用mtcars数据集进行无循环操作

apply(mtcars,2,function(x){
  if (is.numeric(x)){
    return(c("mean"=mean(x),"median"=median(x),"sd"=sd(x)))
  }
})