小编tas*_*alk的帖子

grid.arrange使用图表列表

我觉得我总是在问同一个问题的变种:(

我最近得到了一个使用do.call函数在grid.arrange上显示的图表+表格列表

library(grid)
library(ggplot2)
library(gridExtra)

g1 <- ggplot(data.frame(x=c(0, 10)), aes(x)) + stat_function(fun=sin)
g2 <- ggplot(data.frame(x=c(0, 10)), aes(x)) + stat_function(fun=tan)
g3 <- ggplot(data.frame(x=c(0, 10)), aes(x)) + stat_function(fun=cos)
g4 <- tableGrob(data.frame(x <- 1:10, y<-2:11, z<-3:12))

plist <- list(g1,g2,g3,g4)
do.call("grid.arrange", c(plist))
Run Code Online (Sandbox Code Playgroud)

这有效,但我需要根据变量"numruns"生成"plist"我试过这个,但它不起作用:

plist2 <- list(paste0("g", seq_len(numruns+1)))
do.call("grid.arrange", c(plist2))
Run Code Online (Sandbox Code Playgroud)

我相信我正在做的是调用grid.arrange("g1","g2",...)而不是grid.arrange(g1,g2,...).我在使用lapply之前解决了类似的问题,但在这种情况下,这似乎对我没有帮助,否则我的使用不正确.

谢谢你的帮助.

r

13
推荐指数
1
解决办法
5841
查看次数

按ggplot中的值之和排序条形图

示例数据:

player <- c("a", "b", "a", "b", "c", 
            "a", "a", "b", "c", "b", 
            "c", "a", "c", "c", "a")
is.winner <- c(TRUE, FALSE, TRUE, TRUE, TRUE, 
               FALSE, TRUE, TRUE, TRUE, FALSE, 
               TRUE, TRUE, TRUE, TRUE, FALSE)

df <- data.frame(player, is.winner)
Run Code Online (Sandbox Code Playgroud)

我的第一张图看起来像这样

在此输入图像描述

ggplot(data=df, aes(x=player, y=as.numeric(is.winner))) +
  geom_bar(stat="summary", fun.y=sum) + 
  coord_flip()
Run Code Online (Sandbox Code Playgroud)

我想要做的是将df $ player轴排序为"TR​​UE"值的总和,这样它看起来像这样:

在此输入图像描述

我意识到我可以使用这样的东西:

df$player <- factor(df$player, levels=c("b", "a", "c"))
Run Code Online (Sandbox Code Playgroud)

但实际数据中有更多"玩家名字".另外我想要与胜利百分比等类似的事情.所以自动排序会很棒.以下获胜百分比的示例

在此输入图像描述

df$is.winner <- factor(df$is.winner, levels=c("TRUE", "FALSE"))
df$player <- factor(df$player, levels=c("c", "b", "a"))

library(scales)
library(RColorBrewer)
ggplot(data=df, aes(x=player)) +
  geom_bar(aes(fill=is.winner),position='fill')+
  scale_y_continuous(labels=percent)+
  scale_fill_brewer(palette="Set2") +
  coord_flip()
Run Code Online (Sandbox Code Playgroud)

r

4
推荐指数
1
解决办法
2853
查看次数

总结?计算基于另一列的列中的出现次数

我相信这可能有一个简单的解决方案,但是我在描述我需要做的事情(以及要搜索的内容)时遇到了麻烦。我想我需要summarize功能。我的目标输出在最底部。

我正在尝试计算另一列中每个唯一值之间的值出现次数。这是一个df希望能说明我需要做的例子。

library(dplyr)

set.seed(1)
df <- tibble("name" = c(rep("dinah",2),rep("lucy",4),rep("sora",9)),
             "meal" = c(rep(c("chicken","beef","fish"),5)),
             "date" = seq(as.Date("1999/1/1"),as.Date("2000/1/1"),25),
             "num.wins" = sample(0:30)[1:15])
Run Code Online (Sandbox Code Playgroud)

除其他事项外,我正在尝试总结(汇总)每个姓名使用此数据提供的餐食类型。

df
# A tibble: 15 x 4
   name  meal    date       num.wins
   <chr> <chr>   <date>        <int>
 1 dinah chicken 1999-01-01        8
 2 dinah beef    1999-01-26       11
 3 lucy  fish    1999-02-20       16
 4 lucy  chicken 1999-03-17       25
 5 lucy  beef    1999-04-11        5
 6 lucy  fish    1999-05-06       23
 7 sora  chicken 1999-05-31       27
 8 sora  beef    1999-06-25       15
 9 sora …
Run Code Online (Sandbox Code Playgroud)

r dplyr summarize

4
推荐指数
2
解决办法
126
查看次数

函数内的ggplot2变量

感觉我在这里犯了一个非常愚蠢的错误..因为我之前在另一个项目上做过这个(也许运气好吗?)

目标是通过使用函数在ggplot中构建几个图.我最终希望所有图表都显示在一个页面上,等等......

以下是一个有效的单个ggplot示例:

if (require("ggplot2") == FALSE) install.packages("ggplot2")

data_df = data.frame(matrix(rnorm(200), nrow=20))
time=1:nrow(data_df)

ggplot(data=data_df, aes(x=time, y=data_df[,1])) + 
        geom_point(alpha=1/4) + 
        ggtitle(deparse(substitute(data_df[1])))
Run Code Online (Sandbox Code Playgroud)

请注意,在此范围内将调用其他函数,这些函数将根据调用的dataframe列进行更改.我按照我做的另一个工作示例,但这只是给了我一个错误.我觉得我犯了一个基本错误,但不能指责它!

if (require("ggplot2") == FALSE) install.packages("ggplot2")

data_df = data.frame(matrix(rnorm(200), nrow=20))
time=1:nrow(data_df)

graphit <- function(sample_num){
        ggplot(data=data_df, aes(x=time, y=data_df[,sample_num])) + 
                geom_point(alpha=1/4) + 
                ggtitle(deparse(substitute(data_df[sample_num])))
}

graphit(1)

#Error in `[.data.frame`(data_df, , sample_num) : 
#  object 'sample_num' not found
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助.

r

1
推荐指数
1
解决办法
1280
查看次数

计算列均值和标准差的组

主要在stdev上遇到一些问题,可能还有一个最佳的解决方案。

dat <- data.frame(matrix(rnorm(16*100), ncol=100)) # data
Run Code Online (Sandbox Code Playgroud)

在此示例中,我有一个100列的数据集,我需要以25个样本为一组来获取每行的均值和标准差

我首先找到了可以单独执行此操作的代码

as.data.frame(rowMeans(dat[,1:25]))     # mean of columns 1:25
as.data.frame(apply(dat[,1:25],1,mean)) # mean of columns 1:25
as.data.frame(apply(dat[,1:25],1,sd))   # sd of columns 1:25
Run Code Online (Sandbox Code Playgroud)

最初,我使用rowMeans并通过以下循环进行了这项工作:

dat.means <- list() # create empty list for means
# mean of every 25 cols
count <- 1
for(i in seq(1,length(dat),25)){
  dat.means[[count]] <- cbind(rowMeans(as.data.frame(dat[,i:i+24])))
  count=count+1
}
Run Code Online (Sandbox Code Playgroud)

在这一点上,我找不到等效的rowMeans来计算标准差,因此回溯到尝试使用apply的过程。但是,我对如何以这种方式使用它的知识还很缺乏,而我在这一点上只是遇到了错误。

for(i in seq(1,length(dat),25)){
  dat.means[[count]] <- cbind(apply(dat[,i:i+24],1,mean))
  count=count+1
}

#Error in apply(dat[, i:i + 24], 1, mean) : 
# dim(X) must have a positive length
Run Code Online (Sandbox Code Playgroud)

我已经尝试了上述循环的其他一些迭代,但是仍然收到发布的错误。 …

r

1
推荐指数
1
解决办法
773
查看次数

标签 统计

r ×5

dplyr ×1

summarize ×1