小编use*_*230的帖子

按组计算正负值

我想创建两个变量,以id的形式给出正负总数,希望使用dplyr

示例数据:

library(dplyr)    
set.seed(42)
    df <- data.frame (id=rep(1:10,each=10),
                      ff=rnorm(100, 0,14 ))
> head(df,20)
   id          ff
1   1  19.1934183
2   1  -7.9057744
3   1   5.0837978
4   1   8.8600765
5   1   5.6597565
6   1  -1.4857432
7   1  21.1613080
8   1  -1.3252265
9   1  28.2579320
10  1  -0.8779974
11  2  18.2681752
12  2  32.0130355
13  2 -19.4440498
14  2  -3.9030427
15  2  -1.8664987
16  2   8.9033056
17  2  -3.9795409
18  2 -37.1903759
19  2 -34.1665370
20  2  18.4815868
Run Code Online (Sandbox Code Playgroud)

结果数据集应如下所示:

> head(df,20) …
Run Code Online (Sandbox Code Playgroud)

r dataframe dplyr

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

使用plotly::ggplotly从ggplot图中保留两个图例

当我将具有ggplot两个单独图例的 a 转换为plotly(使用ggplotly)时,两个图例合并。有谁知道如何防止这种情况?

library(tidyverse)
library(plotly)
df <- data.frame(date = 
                   as.Date(c("01/01/1998", "10/01/1998", "15/01/1998", 
                             "25/01/1998", "01/02/1998", "12/02/1998", "20/02/1998"), "%d/%m/%Y"),
                 date2 = as.Date(c(NA, "10/01/1998", NA, 
                                   NA, NA, NA, NA), "%d/%m/%Y"),
                 counts = c(12, 10, 2, 24, 15, 1, 14),
                 yes_no = c("yes", "yes", "yes", "no", "no", "no", "no"))
gg <- ggplot(df, aes(x = date, y = counts)) +
  geom_line() +
  geom_ribbon(aes(ymin = 0, ymax = counts, fill = yes_no), color = NA, alpha = 0.5) +
  ggplot2::scale_fill_brewer(name …
Run Code Online (Sandbox Code Playgroud)

r ggplot2 plotly ggplotly r-plotly

7
推荐指数
0
解决办法
481
查看次数

向函数传递向量或未定义数量的参数

我希望能够通过函数传递未定义数量的参数,...而且还能够向其传递vector. 这是一个愚蠢的例子:

library(tidyverse)
df <- data.frame(gear = as.character(unique(mtcars$gear)),
                 id = 1:3)
myfun <- function(...) {
  ids_lst <- lst(...)
  df2 <- bind_rows(map(ids_lst, function(x) 
    mtcars %>% 
      filter(gear == x) %>% 
      select(mpg)), .id = "gear") %>% 
    left_join(df)
  df2
}
#these all work:
myfun(3)
myfun(3, 4)
myfun(3, 4, 5)
Run Code Online (Sandbox Code Playgroud)

但向它传递向量是行不通的:

myvector <- unique(mtcars$gear)
myfun(myvector)
Run Code Online (Sandbox Code Playgroud)

问题在于函数收集参数的方式以及返回参数的方式:

myfun_lst <- function(...) {
  ids_lst <- lst(...)
  ids_lst
}
myfun_lst(3, 4, 5)
# $`3`
# [1] 3

# $`4`
# [1] 4

# $`5`
# …
Run Code Online (Sandbox Code Playgroud)

arguments r function ellipsis

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

R rmarkdown 表中的连字符/破折号在输出中变成点

假设我有下表(数据集)并将其编织在 rmarkdown 文档中:

```{r global_options, include=FALSE, eval=TRUE, results='asis'}   
knitr::opts_chunk$set(echo=FALSE, #this sets up chunks, can then edit ones we want individually
                  warning=FALSE, 
                  message=FALSE,
                 eval=FALSE)
library(kableExtra)
```

```{r , eval=TRUE, results='asis'}
test <- structure(list(`Dependent: Surv(time, status)` = c("Age", "", 
    ""), c("<40 years", "40-59 years", "60+ years"), `HR (univariable)` = c("-", 
    "0.76 (0.53-1.09, p=0.132)", "0.93 (0.66-1.31, p=0.668)"), `HR (multivariable)` = c("-", 
    "0.79 (0.55-1.13, p=0.196)", "0.98 (0.69-1.40, p=0.926)")), .Names = c("Dependent: Surv(time, status)", 
    "", "HR (univariable)", "HR (multivariable)"), row.names = c(NA, 
    3L), class = …
Run Code Online (Sandbox Code Playgroud)

r knitr r-markdown kable

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

ggpubr::ggarrange 将绘图保存在多个页面上,每页一个图例

我正在尝试保存多个pdf绘图上的绘图,每页有一个整体图例。我想知道是否有一种巧妙的方法来使用ggsaveggpubr::ggarrange执行此操作?更改nrow ncol范围ggarrange仅更改一页的设置,并强制所有绘图位于同一页面上(而不是超过几页)。

library(ggplot2)
library(ggpubr)
plot_f <- function(df, xx) {
  df %>% 
    filter(carb == xx) %>% 
    ggplot() + 
    geom_line(aes(x = disp, y = hp, colour = "darkblue" )) +
    geom_line(aes(x = disp, y = qsec, colour = "red")) +
    scale_color_discrete(name = "Y series", labels = c("Y2", "Y1"))

}

dd <- unique(mtcars$carb)

list_plots <- map(dd, function(x) {
  plot_f(mtcars, x)
})

#WORKS this saves plots all on the same page
ggsave("test.pdf", ggpubr::ggarrange(plotlist = …
Run Code Online (Sandbox Code Playgroud)

r ggplot2 ggpubr

5
推荐指数
0
解决办法
2604
查看次数

从后验预测分布中采样(stan vs inla)

我正在尝试在对象bayesplot上实现包中的函数INLA,并且有点不确定如何从后验预测分布中提取。我想我几乎已经拿到了,但是rstan 抽签比抽签更加多变INLA

在 中,使用小插图rstan中的简化示例我可以:bayesplot

library(bayesplot)
library(ggplot2)
library(rstanarm)
library(ggpubr)
library(tidyverse)


#rstan model set up
roaches$roach100 <- roaches$roach1 / 100 # pre-treatment number of roaches (in 100s)
fit_poisson <- stan_glm(y ~ roach100 + treatment + senior, offset = log(exposure2), family = poisson(link = "log"), data = roaches,  seed = 1111,  refresh = 0) 


#In order to use the PPC functions from the bayesplot package we need a vector y of outcome …
Run Code Online (Sandbox Code Playgroud)

r mixed-models rstan rstanarm r-inla

5
推荐指数
0
解决办法
931
查看次数

安装新版本 R 后恢复所有 R 包?

当您进行更新时,当某些软件包打开但其余软件包(或其他来源)R打开时,重新安装和更新先前R版本上已安装的所有软件包的最佳方法是什么?CRANgithub

过去,我遵循以下方法:

打开旧版本R(例如R 3.6)并复制所有已安装的软件包:

installed <- as.data.frame(installed.packages())
#save a copy
write.csv(installed, 'previously_installed.csv')
Run Code Online (Sandbox Code Playgroud)

然后安装并打开新版本R(例如R 4.1),读取旧包名称并安装(从默认值CRAN:):

previously_installed <- read.csv('previously_installed.csv')
package_list <- as.character(previously_installed$Package)
package_list

install.lib <- package_list[!package_list %in% installed.packages()]   
for(lib in install.lib) install.packages(lib, dependencies = TRUE)
Run Code Online (Sandbox Code Playgroud)

这非常有效,但只会安装已打开的软件包,因此不会安装CRAN所有已打开的软件包。github有没有办法自动安装这些软件包github

您可以找出哪些软件包未安装(例如剩余的github软件包):

git_packages_not_installed <- install.lib[!install.lib %in% installed.packages()] 
Run Code Online (Sandbox Code Playgroud)

我认为您需要知道作者姓名才能安装所有github软件包,所以我不确定如何自动执行此操作(例如devtools::install_github("DeveloperName/PackageName")。我知道您可以提供两个存储库选项,但我不确定这是否有帮助或参见此处

在这种情况下,最佳实践是什么?

谢谢

r github repository cran install.packages

5
推荐指数
2
解决办法
3923
查看次数

R通过id以零开头在dplyr中创建序列

我正在寻找最干净的方法来创建一个在数据框中按 id 从零开始的序列。

df <- data.frame (id=rep(1:10,each=10))
Run Code Online (Sandbox Code Playgroud)

如果我想从 1 开始序列,可以执行以下操作:

library(dplyr)
df<-df %>% group_by(id) %>%
  mutate(start = 1:n()) %>% 
  ungroup()
Run Code Online (Sandbox Code Playgroud)

但从 0 开始不起作用,因为它会创建一个额外的数字(0-10 与 1-10 相比),所以我需要添加一个额外的行,有没有一种方法可以一步完成这一切,也许使用dplyr?显然有很多解决方法,例如创建另一个数据集并将其附加到原始数据集。

df1 <- data.frame (id=1:10,
                  start=0)
new<-rbind(df,df1)
Run Code Online (Sandbox Code Playgroud)

这看起来有点尴尬而且不那么整洁。我知道您可以在 dplyr 中使用 rbind,但不确定如何将所有内容合并到一个步骤中,特别是如果您有其他非定时变化变量,您只想复制到新行中。有兴趣看看建议,谢谢。

r seq dplyr

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

映射列并应用自定义函数

这里遗漏了一些小东西,并且努力将列传递到函数中。我只想map(或lapply)遍历列并在每个列上执行自定义函数。这里是最小的例子:

library(tidyverse)
set.seed(10)
df <- data.frame(id = c(1,1,1,2,3,3,3,3),
                    r_r1 = sample(c(0,1), 8, replace =  T),
                    r_r2 = sample(c(0,1), 8, replace =  T),
                    r_r3 = sample(c(0,1), 8, replace =  T))
df
#   id r_r1 r_r2 r_r3
# 1  1    0    0    1
# 2  1    0    0    1
# 3  1    1    0    1
# 4  2    1    1    0
# 5  3    1    0    0
# 6  3    0    0    1
# 7  3    1    1 …
Run Code Online (Sandbox Code Playgroud)

r dplyr purrr

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

将调色板与 colorRampPalette 合并并使用传单进行绘图

我正在尝试合并两个colorRampPalette方案以使用leaflet并且一直在关注这个很好的 例子。该示例工作正常,但我似乎无法让它为我的工作工作,下面是可重现的示例。我正在使用RdYlGn调色板,我希望低于阈值的数字为深绿色,高于阈值的数字为红色(跳过一些内部颜色)。

对于我的示例,我的截止值nc$PERIMETER< 1.3,因此我希望此值以下的数字为绿色,而所有高于红色的数字(颜色#FDAE61向前)。

library(sf)  
library(leaflet)
library(RColorBrewer)

#palette im using
palette <- rev(brewer.pal(11, "RdYlGn"))
# [1] "#006837" "#1A9850" "#66BD63" "#A6D96A" "#D9EF8B" "#FFFFBF" "#FEE08B" "#FDAE61" "#F46D43" "#D73027" "#A50026"
previewColors(colorNumeric(palette = palette, domain = 0:10), values = 0:10)


# preparing the shapefile
nc <- st_read(system.file("gpkg/nc.gpkg", package="sf"), quiet = TRUE) %>% 
  st_transform(st_crs(4326)) %>% 
  st_cast('POLYGON')
nc

x <- sum(nc$PERIMETER < 1.3)  
x # number of values below threshold = 21


### Create an …
Run Code Online (Sandbox Code Playgroud)

maps r colors color-palette leaflet

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