我想创建两个变量,以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) 当我将具有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) 我希望能够通过函数传递未定义数量的参数,...而且还能够向其传递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) 假设我有下表(数据集)并将其编织在 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) 我正在尝试保存多个pdf绘图上的绘图,每页有一个整体图例。我想知道是否有一种巧妙的方法来使用ggsave和ggpubr::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) 我正在尝试在对象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打开时,重新安装和更新先前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")。我知道您可以提供两个存储库选项,但我不确定这是否有帮助或参见此处。
在这种情况下,最佳实践是什么?
谢谢
我正在寻找最干净的方法来创建一个在数据框中按 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,但不确定如何将所有内容合并到一个步骤中,特别是如果您有其他非定时变化变量,您只想复制到新行中。有兴趣看看建议,谢谢。
这里遗漏了一些小东西,并且努力将列传递到函数中。我只想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) 我正在尝试合并两个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)