小编jal*_*pic的帖子

将自定义图像添加到geom_polygon会填写ggplot

学生问我是否可以使用R重新创建类似下面的图:

在此输入图像描述 这是从 这篇论文....

这种东西不是我的专长,但使用下面的代码我能够创建95%CI省略号并用它们绘制geom_polygon().我使用rphylopic包装从图像库中抓取的图像填充图像.

#example data/ellipses
set.seed(101)
n <- 1000
x1 <- rnorm(n, mean=2)
y1 <- 1.75 + 0.4*x1 + rnorm(n)
df <- data.frame(x=x1, y=y1, group="A")
x2 <- rnorm(n, mean=8)
y2 <- 0.7*x2 + 2 + rnorm(n)
df <- rbind(df, data.frame(x=x2, y=y2, group="B"))
x3 <- rnorm(n, mean=6)
y3 <- x3 - 5 - rnorm(n)
df <- rbind(df, data.frame(x=x3, y=y3, group="C"))


#calculating ellipses
library(ellipse)
df_ell <- data.frame()
for(g in levels(df$group)){
  df_ell <- rbind(df_ell, cbind(as.data.frame(with(df[df$group==g,], ellipse(cor(x, y), 
                                                                             scale=c(sd(x),sd(y)), …
Run Code Online (Sandbox Code Playgroud)

r ggplot2

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

将x轴放在ggplot2图表的顶部

我觉得这应该是显而易见的......我所要做的就是从图形底部删除x轴并将其添加到顶部.

这是一个可重复的例子.数据加代码来制作以下图表:

library(reshape2)
library(ggplot2)

data(mtcars)
dat <- with(mtcars, data.frame(mpg, cyl, disp, hp, wt, gear))
cor.matrix <- round(cor(dat, use = "pairwise.complete.obs", method = "spearman"), digits = 2)
diag(cor.matrix)<-NA

cor.dat <- melt(cor.matrix)
cor.dat <- data.frame(cor.dat)
cor.dat <- cor.dat[complete.cases(cor.dat),]


ggplot(cor.dat, aes(Var2, Var1, fill = value)) + 
  geom_tile(colour="gray90", size=1.5, stat="identity") + 
  geom_text(data=cor.dat, aes(Var2, Var1, label = value), color="black", size=rel(4.5)) +
  scale_fill_gradient(low = "white", high = "dodgerblue", space = "Lab", na.value = "gray90", guide = "colourbar") +
  scale_x_discrete(expand = c(0, 0)) +
  scale_y_discrete(expand = c(0, …
Run Code Online (Sandbox Code Playgroud)

r ggplot2

42
推荐指数
3
解决办法
3万
查看次数

在dplyr中结合grepl过滤观察结果

我试图找出如何使用dplyr和过滤大型数据集中的一些观察结果grepl.grepl如果其他解决方案更优化,我不会坚持.

拿这个样本df:

df1 <- data.frame(fruit=c("apple", "orange", "xapple", "xorange", 
                          "applexx", "orangexx", "banxana", "appxxle"), group=c("A", "B") )
df1


#     fruit group
#1    apple     A
#2   orange     B
#3   xapple     A
#4  xorange     B
#5  applexx     A
#6 orangexx     B
#7  banxana     A
#8  appxxle     B
Run Code Online (Sandbox Code Playgroud)

我想要:

  1. 过滤掉以'x'开头的那些案例
  2. 过滤掉那些以'xx'结尾的案例

我已经设法弄清楚如何摆脱包含'x'或'xx'的所有东西,但不是以开头或结尾.这里是如何摆脱内部'xx'的一切(不仅仅是结束):

df1 %>%  filter(!grepl("xx",fruit))

#    fruit group
#1   apple     A
#2  orange     B
#3  xapple     A
#4 xorange     B
#5 banxana     A
Run Code Online (Sandbox Code Playgroud)

这显然是"错误的"(从我的角度来看)过滤了'appxxle'.

我从来没有完全掌握正则表达式.我一直在尝试修改代码,例如: grepl("^(?!x).*$", df1$fruit, perl = …

r filter dplyr grepl

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

在数据帧中为每组采样n个随机行

从这些问题- 从R数据帧的子集的行的随机样品 & 在数据帧样本随机行 我可以很容易地看到如何随机抽样(选择)"N"行从DF,或者"n"个来自特定级发起行df中的因子.

以下是一些示例数据:

df <- data.frame(matrix(rnorm(80), nrow=40))
df$color <-  rep(c("blue", "red", "yellow", "pink"), each=10)

df[sample(nrow(df), 3), ] #samples 3 random rows from df, without replacement.
Run Code Online (Sandbox Code Playgroud)

例如,从"粉红色"颜色中抽取3个随机行 - 使用library(kimisc):

library(kimisc)
sample.rows(subset(df, color == "pink"), 3)
Run Code Online (Sandbox Code Playgroud)

或编写自定义功能:

sample.df <- function(df, n) df[sample(nrow(df), n), , drop = FALSE]
sample.df(subset(df, color == "pink"), 3)
Run Code Online (Sandbox Code Playgroud)

但是,我想从每个级别的因子中抽取3(或n)个随机行.即新的df将有12行(蓝色3个,红色3个,黄色3个,粉红色3个).显然可以多次运行,为每种颜色创建newdf,然后将它们绑定在一起,但我正在寻找一种更简单的解决方案.

random r sample dataframe

24
推荐指数
4
解决办法
3万
查看次数

格式化sliderInput的数字输出有光泽

我的问题的一个很好的例子可以在Shiny Gallery的Movie Review示例中找到:

http://shiny.rstudio.com/gallery/movie-explorer.html

左侧面板上有一个名为"Year Released"的滑块,范围介于1940年至2014年之间.以下是来自 ui.R

sliderInput("year", "Year released", 1940, 2014, value = c(1970, 2014))

您会注意到使用滑块时的年份格式如下:

"1,940" "2,014" 用逗号分隔第一个数字和最后三个数字.

我知道可以dateRangeInput在Shiny中使用,但这需要变量采用日期格式.对于简单数字的数据变量,例如这个例子,是否有一种简单的方法来格式化数字输出以删除逗号?我似乎无法弄清楚这一点,这似乎很简单.

r shiny

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

将具有混合日期格式的变量转换为一种格式

我的数据帧的示例:

                date
1   25 February 1987
2     20 August 1974
3     9 October 1984
4     18 August 1992
5  19 September 1995
6          16-Oct-63
7          30-Sep-65
8        22 Jan 2008
9         13-11-1961
10    18 August 1987
11         15-Sep-70
12    5 October 1994
13   5 December 1984
14          03/23/87
15    30 August 1988
16        26-10-1993
17    22 August 1989
18         13-Sep-97
Run Code Online (Sandbox Code Playgroud)

我有一个大型数据框,其日期变量有多种日期格式.变量中的大多数格式如上所示 - 还有一些非常罕见的其他格式.有多种格式的原因是数据是从各种网站中提取的,每个网站都使用不同的格式.

我尝试过使用简单的转换,例如

strftime(mydf$date,"%d/%m/%Y")
Run Code Online (Sandbox Code Playgroud)

但如果有多种格式,这些转换将无效.我不想求助于多个gsub类型的编辑.我想知道我是否错过了一个更简单的解决方案?

代码例如:

    structure(list(date = structure(c(12L, 8L, 18L, 6L, 7L, 4L, 14L, 
10L, 1L, 5L, 3L, …
Run Code Online (Sandbox Code Playgroud)

formatting r date

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

将多个阴影/矩形添加到ggplot2图形

我想在ggplot2图上添加多个阴影/矩形.在这个可重复的例子中,我只添加3,但我可能需要使用完整数据加起来一百.

这是我的原始数据的一个子集 - 在一个名为的数据框中temp- dput位于问题的底部:

     Season tier  group value
NA       NA   NA   <NA>    NA
99     1948    2   Wins    20
101    1948    2 Losses    17
NA.1     NA   NA   <NA>    NA
NA.2     NA   NA   <NA>    NA
104    1951    2   Wins    21
106    1951    2 Losses    18
107    1952    2   Wins    23
109    1952    2 Losses    18
110    1953    2   Wins    25
112    1953    2 Losses    18
113    1954    2   Wins    26
115    1954    2 Losses    19
116    1955    2 …
Run Code Online (Sandbox Code Playgroud)

r ggplot2

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

找到最快的方法来获取向量中相同元素之间的所有间隔

假设我有一个包含8个字母的字符向量,每个字符出现两次:

x <- rep(LETTERS[1:8],2)
set.seed(1)
y <- sample(x)
y

# [1] "E" "F" "A" "D" "C" "B" "C" "G" "F" "A" "B" "G" "E" "H" "D" "H"
Run Code Online (Sandbox Code Playgroud)

我想找到每对字母之间的间隔.这里,interval是指两个相同字母之间的字母数.我可以像这样手动完成:

abs(diff(which(y=="A")))-1  #6
abs(diff(which(y=="D")))-1  #10
abs(diff(which(y=="H")))-1  #1
Run Code Online (Sandbox Code Playgroud)

我写了一个for循环来做这个...

res<-NULL
for(i in 1:8){  res[[i]] <- abs(diff(which(y==LETTERS[i])))-1 }

names(res)<-LETTERS[1:8]
res

# A  B  C  D  E  F  G  H 
# 6  4  1 10 11  6  3  1 
Run Code Online (Sandbox Code Playgroud)

但是,我想在具有很长向量的随机化过程中使用这种方法.速度对此至关重要 - 我想知道是否有人有尽可能快速解决这个问题的好主意.

r

14
推荐指数
3
解决办法
879
查看次数

使用非重复元素生成向量的多个排列

我有一个矢量:

seq1<-c('a','b','c','b','a','b','c','b','a','b','c')
Run Code Online (Sandbox Code Playgroud)

我希望置换此向量的元素以创建多个(理想情况下多达5000个)向量,条件是置换向量不能在连续元素中的向量内具有重复元素.例如,"abbca ...."是不允许的,因为'bb'是重复.

我意识到,对于这个小例子,可能没有5000个解决方案.我通常处理更大的向量.我也愿意考虑更换样品,但目前我正在研究无需更换的解决方案.

我正在寻找比我目前的想法更好的解决方案.

选项1. - 蛮力.

在这里,我只是重复采样并检查是否有任何连续的元素是重复的.

set.seed(18)
seq1b <-  sample(seq1a)
seq1b
#[1] "b" "b" "a" "a" "c" "b" "b" "c" "a" "c" "b"
sum(seq1b[-length(seq1b)]==seq1b[-1])  #3
Run Code Online (Sandbox Code Playgroud)

这不是解决方案,因为有3个重复的连续元素.我也意识到这lag可能是检查重复元素的更好方法,但由于某种原因它很挑剔(我认为它被我加载的另一个包掩盖了).

set.seed(1000)
res<-NULL
for (i in 1:10000){res[[i]]<-sample(seq1a)}
res1 <- lapply(res, function(x) sum(x[-length(x)]==x[-1]))
sum(unlist(res1)==0) #228
Run Code Online (Sandbox Code Playgroud)

这在10000次迭代中产生228个选项.但是,让我们看看有多少独特的:

res2 <- res[which(unlist(res1)==0)]
unique(unlist(lapply(res2, paste0, collapse="")))  #134
Run Code Online (Sandbox Code Playgroud)

在10000次尝试中,我们只从这个简短的示例向量中获得134个唯一的.

以下是134个生成的示例序列中的3个:

# "bcbabcbabca" "cbabababcbc" "bcbcababacb"
Run Code Online (Sandbox Code Playgroud)

事实上,如果我尝试超过500,000个样本,我只能得到212个符合我的非重复标准的独特序列.这可能接近可能的上限.

选项2. - 迭代

我的第二个想法是对方法更加迭代.

seq1a
table(seq1a)
#a b c 
#3 5 3
Run Code Online (Sandbox Code Playgroud)

我们可以将其中一个字母作为起点.然后从剩下的那些中取样另一个,检查它是否与先前选择的相同,如果没有,则将其添加到最后.等等等等...

set.seed(10)
newseq <- sample(seq1a,1)  #b
newseq #[1] …
Run Code Online (Sandbox Code Playgroud)

r

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

添加NA以使所有列表元素的长度相等

我做了一系列的事情dplyr,tidyr,所以想保持与管道解决方案,如果可能的.

我有一个列表,每个组件中的元素数量不均匀:

lolz <- list(a = c(2,4,5,2,3), b = c(3,3,2), c=c(1,1,2,4,5,3,3), d=c(1,2,3,1), e=c(5,4,2,2))
lolz
$a
[1] 2 4 5 2 3

$b
[1] 3 3 2

$c
[1] 1 1 2 4 5 3 3

$d
[1] 1 2 3 1

$e
[1] 5 4 2 2
Run Code Online (Sandbox Code Playgroud)

我想知道是否有一个整齐的衬里用NAs填充每个元素,使得它们都与具有最大项目的元素具有相同的长度:

我有2个班轮:

lolz %>% lapply(length) %>% unlist %>% max -> mymax
lolz %>% lapply(function(x) c(x, rep(NA, mymax-length(x))))


$a
[1]  2  4  5  2  3 NA NA

$b
[1]  3 …
Run Code Online (Sandbox Code Playgroud)

r dplyr tidyr

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

标签 统计

r ×10

ggplot2 ×3

dplyr ×2

dataframe ×1

date ×1

filter ×1

formatting ×1

grepl ×1

random ×1

sample ×1

shiny ×1

tidyr ×1