小编And*_*lor的帖子

ggsave从ggplot + gridExtra中丢失unicode字符

比你真正需要更多的代码,但要设置心情:

#Make some data and load packages
data<-data.frame(pchange=runif(80,0,1),group=factor(sample(c(1,2,3),80,replace=T)))
library(dplyr)
library(magrittr)
library(gridExtra)
library(ggplot2)
data%<>%arrange(group,pchange) %>% mutate(num=1:80)

#Make plot that includes unicode characters
g1<-ggplot(data, aes(factor(num),pchange, fill = group,width=.4)) +
  geom_bar(stat="identity", position = "dodge") +
  theme_classic()+
  theme(axis.ticks = element_blank(), 
        axis.text.x = element_blank(),
        legend.position="right")+
  scale_y_continuous(breaks=c(0,.25,.5,.75,1))+
  xlab("")+
  scale_fill_discrete("Arbitrary Group",
                      breaks=c(1,2,3),
                      labels=c("< 1 Year", "\u2265 1 Year & \n\u2264 5 Years","> 5 Years"))


#I want to add an A below the plot (this may not be necessary for the issue, but its a part of the …
Run Code Online (Sandbox Code Playgroud)

unicode r ggplot2

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

按治疗类型汇总(计数/频率),其中个体可以接受两种治疗

假设我们有这些数据:

dat<-data.frame(id=c(1,1,2,2,3,4,4,5,6,6),Rx=c(1,2,1,2,1,1,1,2,2,2))

   id Rx
1   1  1
2   1  2
3   2  1
4   2  2
5   3  1
6   4  1
7   4  1
8   5  2
9   6  2
10  6  2
Run Code Online (Sandbox Code Playgroud)

其中Id是主题ID,Rx是他们收到的治疗.因此,有重复的观察结果,每个受试者的治疗可能也可能不一致.

我希望能够总结有多少受试者仅接收Rx 1,仅接收Rx 2,以及接收Rx 1和2多少受试者.

我宁愿一个dplyr解决方案,但data.tablebase R会被罚款了.我想的是:

dat %>%
  group_by(id,Rx) %>%
  unique() %>%
  ...something
Run Code Online (Sandbox Code Playgroud)

最终结果应该是这样的:

  Rx    Count
   1        2
   2        2
Both        2
Run Code Online (Sandbox Code Playgroud)

谢谢!

r dplyr

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

ggplot2:将轴连接到点的线

数据:

df<-data.frame(grp=letters[1:4],perc=runif(4))
Run Code Online (Sandbox Code Playgroud)

第一个选项:

首先,为每个组创建包含零的第二个数据集

df2<-rbind(df,data.frame(grp=df[,1],perc=c(0,0,0,0)))
Run Code Online (Sandbox Code Playgroud)

然后用geom_points和绘图geom_line

ggplot(df,aes(y=perc,x=grp))+
  geom_point()+
  geom_line(data=df2, aes(y=perc, x=grp))+
  coord_flip()
Run Code Online (Sandbox Code Playgroud)

太多工作_看起来不错

这看起来很好。创建第二个数据集的额外工作太多了。

另一个选项是使用 geom_bar 并使宽度变小:

ggplot(df,aes(y=perc,x=grp))+
  geom_point()+
  geom_bar(stat="identity",width=.01)+
  coord_flip()
Run Code Online (Sandbox Code Playgroud)

WeirdThinBars_NotSameSizeinPDF

但这也很奇怪,当我保存到 .pdf 时,并非所有的条都具有相同的宽度。

显然必须有一种更简单的方法来做到这一点,有什么建议吗?

r ggplot2

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

将Rstudio插件包中包含的.rmd文件复制到用户定义的目录中

在这里有一个rstudio addin包.

其中一个插件允许用户定义目录,它会将位于包中的文件复制到该目录.

该文件位于:

atProjectManageAddins/inst/Docs/RMarkdownSkeleton.Rmd
Run Code Online (Sandbox Code Playgroud)

我试图将它复制到用户定义的目录,如下所示:

 file.copy("inst/Docs/RMarkdownSkeleton.Rmd", 
           paste0(Dir, FolderName, "/Reports/", FolderName, "_report.Rmd"))
Run Code Online (Sandbox Code Playgroud)

我试图将它从包中的位置复制到用户定义的位置(基于两个单独的参数DirFolderName).

但这似乎不起作用.我的假设是我没有以正确的方式引用包目录.我试过了./Inst/,~/Inst/也许还有几个.我现在的假设是,有一个更系统的原因导致我无法file.copy()上班.

有什么建议?这甚至可能吗?

请注意,如果我通过source()和本地运行该功能runGadget(),它可以正常工作.只有在安装软件包并且我使用RStudio addins GUI引用它的软件包时,它才会失败.因此,我很确定我没有正确定义已安装.Rmd文件的文件路径.

编辑:我已经根据Carl的建议(在github上可以看到)更改为以下内容,但文件仍未被复制.

file.copy(system.file("Docs","Rmarkdownskeleton.rmd",package="atProjectManageAd??dins"),
 paste0(Dir, FolderName, "/Reports/", FolderName, "_report.Rmd"))
Run Code Online (Sandbox Code Playgroud)

r file-copying r-package

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

使用两个分组指定来创建一个"组合"分组变量

给定data.frame:

df <- data.frame(grp1 = c(1,1,1,2,2,2,3,3,3,4,4,4),
                 grp2 = c(1,2,3,3,4,5,6,7,8,6,9,10))

#> df
#   grp1 grp2
#1     1    1
#2     1    2
#3     1    3
#4     2    3
#5     2    4
#6     2    5
#7     3    6
#8     3    7
#9     3    8
#10    4    6
#11    4    9
#12    4   10
Run Code Online (Sandbox Code Playgroud)

两个coluns都是分组变量,因此grp1已知列中的所有1 都被组合在一起,依此类推所有2,等等.然后同样如此grp2.众所周知,所有1都是相同的,所有2都是相同的.

因此,如果我们查看第3行和第4行,基于第1列,我们知道前3行可以组合在一起,后3行可以组合在一起.然后由于第3行和第4行共享相同的grp2值,我们知道所有6行实际上可以组合在一起.

根据相同的逻辑,我们可以看到最后六行也可以组合在一起(因为第7行和第10行共享相同的行grp2).

除了编写一组相当for()复杂的循环之外,还有更直接的方法吗?我还没有想过一个人.

我希望获得的最终输出看起来像:

# > df
#    grp1 grp2 combinedGrp
# 1     1    1           1
# 2 …
Run Code Online (Sandbox Code Playgroud)

algorithm r

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

Python等效于do.call(rbind,lapply())

我的工作流程中的一个主要工具是do.call(rbind, lapply())R中的示例:

df1 <- data.frame(x1 = rnorm(10), x2 = rnorm(10), x3 = rnorm(10))
df2 <- data.frame(x1 = rnorm(10, 5), x2 = rnorm(10), x3 = rnorm(10))

getp <- function(var) {
  return(t.test(df1[, var], df2[, var])$p.value)
}

list <- c('x1', 'x2', 'x3')
ps <- do.call(rbind, lapply(list, getp))
ps
                 [,1]
[1,] 6.232025e-09
[2,] 2.128019e-09
[3,] 5.824713e-08
Run Code Online (Sandbox Code Playgroud)

这会创建一个很好的p值列.在现实世界中,我会提取一行data.frame,每列都有有用的模型统计数据.目标是迭代具有相同模型类型的许多列并查看拟合/效果.

在python中,我可以创建一个类似的函数:

from statsmodels.stats.weightstats import ttest_ind 
import numpy as np
import pandas as pd

df1 = pd.DataFrame({'x1' : np.random.randn(10), 'x2' : np.random.randn(10), 'x3' : np.random.randn(10)}) 
df2 …
Run Code Online (Sandbox Code Playgroud)

python r lapply pandas

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

全部为 NA 的 rowSums

df <- data.frame(a = c(1, 1, NA, 0, 1, 0),
                 b = c(0, 1, NA, NA, 0, 1),
                 c = c(NA, 0, NA, 0, 1, NA),
                 d = c(1, NA, NA, 1, 1, 0))

rowSums(df)
#[1] NA NA NA NA  3 NA
rowSums(df, na.rm=T)
#[1] 2 2 0 1 3 1
Run Code Online (Sandbox Code Playgroud)

我得到的第一个,但我的假设和希望是第三个观察结果会返回NA。有没有办法让它为第三次观察返回NA?

r

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

标签 统计

r ×7

ggplot2 ×2

algorithm ×1

dplyr ×1

file-copying ×1

lapply ×1

pandas ×1

python ×1

r-package ×1

unicode ×1