我试图找出如何有效地选择列使用dplyr::select_if
.starwars
dplyr 0.70中的数据集是一个很好的数据集,用于此:
> starwars
# A tibble: 87 x 13
name height mass hair_color skin_color eye_color birth_year gender homeworld species films vehicles starships
<chr> <int> <dbl> <chr> <chr> <chr> <dbl> <chr> <chr> <chr> <list> <list> <list>
1 Luke Skywalker 172 77 blond fair blue 19.0 male Tatooine Human <chr [5]> <chr [2]> <chr [2]>
2 C-3PO 167 75 <NA> gold yellow 112.0 <NA> Tatooine Droid <chr [6]> <chr [0]> <chr [0]>
3 R2-D2 96 32 <NA> …
Run Code Online (Sandbox Code Playgroud) 我正在尝试编译一个包装插图,使.md文件保留在vignette文件夹中,以便它仍然可以在github上看到.我正在使用devtools
这一切.我已经看过这种方法,并将在下面概述:
我已经自动生成了一个晕影模板使用devtools::use_vignette()
.然后我修改了.Rmd
文件看起来像这样(截断的模板版本):
---
title: "package"
author: "author"
date: "`r Sys.Date()`"
output:
rmarkdown::html_vignette:
toc: true
keep_md: true
vignette: >
%\VignetteIndexEntry{Vignette Title}
%\VignetteEngine{knitr::rmarkdown}
%\VignetteEncoding{UTF-8}
---
Vignettes are long form documentation commonly included in packages. Because they are part of the distribution of the package, they need to be as compact as possible. The `html_vignette` output type provides a custom style sheet (and tweaks some options) to ensure that the resulting html is as small …
Run Code Online (Sandbox Code Playgroud) 我希望合并润滑间隔,以便如果它们重叠,则从内部第一个时间获取最小值和从内部最后一个时间获取最大值并总结以创建一个跨越整个时间段的新间隔。这是一个reprex:
library(lubridate, warn.conflicts = FALSE)
library(dplyr, warn.conflicts = FALSE)
library(tibble)
dat <- tibble(
animal = rep(c("elk", "wolf", "moose"), each = 2),
date_interval = c(
interval(as.Date("2020-04-01"), as.Date("2020-04-05")),
interval(as.Date("2020-04-10"), as.Date("2020-04-15")),
interval(as.Date("2020-03-01"), as.Date("2020-04-01")),
interval(as.Date("2020-02-15"), as.Date("2020-03-15")),
interval(as.Date("2020-10-01"), as.Date("2020-11-01")),
interval(as.Date("2020-09-15"), as.Date("2020-10-15"))
)
)
dat
#> # A tibble: 6 x 2
#> animal date_interval
#> <chr> <Interval>
#> 1 elk 2020-04-01 UTC--2020-04-05 UTC
#> 2 elk 2020-04-10 UTC--2020-04-15 UTC
#> 3 wolf 2020-03-01 UTC--2020-04-01 UTC
#> 4 wolf 2020-02-15 UTC--2020-03-15 UTC
#> 5 moose 2020-10-01 …
Run Code Online (Sandbox Code Playgroud) 我正在尝试在四开文档中一起使用 R 和 Observable,如下所示: https: //quarto.org/docs/interactive/ojs/
据我所知,人们使用该ojs_define
函数来使数据可供观察。因此,对于下面的示例,我尝试使用palmerpenguins::penguins_raw
:
---
title: "Untitled"
format: html
---
```{r}
ojs_define(data = palmerpenguins::penguins_raw)
```
```{ojs}
viewof bill_length_min = Inputs.range(
[32, 50],
{value: 35, step: 1, label: "Bill length (min):"}
)
viewof islands = Inputs.checkbox(
["Torgersen", "Biscoe", "Dream"],
{ value: ["Torgersen", "Biscoe"],
label: "Islands:"
}
)
```
```{ojs}
filtered = data.filter(function(penguin) {
return bill_length_min < penguin.bill_length_mm &&
islands.includes(penguin.island);
})
```
```{ojs}
Plot.rectY(filtered,
Plot.binX(
{y: "count"},
{x: "body_mass_g", fill: "species", thresholds: 20}
))
.plot({ …
Run Code Online (Sandbox Code Playgroud) 我希望生成一个采用数据帧的表,计算每列中的所有NA值,然后返回另一个显示该计数的数据帧.我更喜欢在这里使用dplyr工具.我到目前为止:
library(dplyr)
airquality %>%
group_by(Month) %>%
summarise_each(funs(sum(. == 41, na.rm = TRUE)))
Run Code Online (Sandbox Code Playgroud)
这将返回一个计算所有41个的表.但如果我将它修改为NA就像这样:
airquality %>%
group_by(Month) %>%
summarise_each(funs(sum(. == "NA")))
Run Code Online (Sandbox Code Playgroud)
这不会产生所需的输出(如上所述).关于如何生成一个计算每列中所有NA值的表的任何想法?
提前致谢
我想总结一个数据框,以便列包含特定组中唯一值的字符串.所以使用虹膜数据集:
iris %>%
group_by(Species) %>%
summarise(mPW=mean(Petal.Width))
Run Code Online (Sandbox Code Playgroud)
这给出了按物种分组的Petal.Width的平均值.但是,如果我想将所有用于计算该值的值作为输出,那该怎么办呢?我希望列表中的这些唯一值虽然不在列表的R含义中.我试过这个,但显然这是错的:
iris %>%
group_by(Species) %>%
summarise(lPW=paste(Petal.Width, sep=","))
Run Code Online (Sandbox Code Playgroud)
这是截断的所需示例数据帧输出.请注意,所需的输出LPW
是一个字符对象:
Species lPW
setosa 0.1,0.2,0.3,0.4,0.5,0.6
....
Run Code Online (Sandbox Code Playgroud)
我没有dplyr
解决方案.这就是我正常工作的方式.
提前致谢.
我是编写函数的新手,因此我无法想象这一点也就不足为奇了.我只想生成一个简单的函数,其中一个指定数据帧和你想要的变量,然后ggplot生成一个双变量图.我觉得下面应该工作,因为我使用了几个与ggplot2函数建议的变通方法:
library(ggplot2)
xy <- data.frame(xvar=1:10,yvar=1:10)
plotfunc <- function(Data, x, y){
.e <- environment()
ggplot(Data, aes(x = x, y = y), environment = .e) +
geom_line()
}
plotfunc(xy, xvar, yvar)
Run Code Online (Sandbox Code Playgroud)
但是,上面的代码生成此错误消息:
Error in eval(expr, envir, enclos) : object 'xvar' not found
In addition: Warning message:
In eval(expr, envir, enclos) : restarting interrupted promise evaluation
Run Code Online (Sandbox Code Playgroud)
我在这里做错了什么建议?显然这是一个微不足道的例子,我希望将其扩展到更广泛的用途.
提前致谢.
这是一个愚蠢的例子,但我不知道如何解决这个问题。希望这能说明我的问题。我在 Windows 10 中工作。我的数据包含在此目录中:
C:/Project/Attempt1/RCode/Data/data.txt
如果我的 R 脚本在,C:/Project/Attempt1/RCode
我可以像这样读取数据:
read.table(./Data/data.txt
)
但是,如果我的数据保留在同一个地方,但我这里有另一个脚本:
C:/Project/Attempt2/RCode
如何在data.txt
不引用整个路径的情况下访问该文件?但这不起作用:.Attempt1/RCode/Data/data.txt
如果我的工作目录是C:/Project/Attempt2/RCode
.
为了回答这个问题,请相信以下三件事是正确的:
data.txt
我希望这是有道理的
有没有办法在代码块之外的 rmarkdown 文档中传递参数?例如,我希望能够将参数值作为标题。
这是一个简短的示例.Rmd
文件:
---
title: "param_test"
author: "test"
date: "September 14, 2017"
output: pdf_document
params:
param_test: this_text
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
```
## I want this heading to be the value of params$param_test
```{r cars}
params$param_test
print(params$param_test)
```
Run Code Online (Sandbox Code Playgroud)
有没有人对此有任何想法?
考虑一个将每个变量彼此关联的数据帧:
iris_cor <- structure(list(x = c("Sepal.Length", "Sepal.Length", "Sepal.Length",
"Sepal.Length", "Sepal.Width", "Sepal.Width", "Sepal.Width",
"Sepal.Width", "Petal.Length", "Petal.Length", "Petal.Length",
"Petal.Length", "Petal.Width", "Petal.Width", "Petal.Width",
"Petal.Width"), y = c("Sepal.Length", "Sepal.Width", "Petal.Length",
"Petal.Width", "Sepal.Length", "Sepal.Width", "Petal.Length",
"Petal.Width", "Sepal.Length", "Sepal.Width", "Petal.Length",
"Petal.Width", "Sepal.Length", "Sepal.Width", "Petal.Length",
"Petal.Width"), r = c(NA, -0.117569784133002, 0.871753775886583,
0.817941126271576, -0.117569784133002, NA, -0.42844010433054,
-0.366125932536439, 0.871753775886583, -0.42844010433054, NA,
0.962865431402796, 0.817941126271576, -0.366125932536439, 0.962865431402796,
NA)), row.names = c(NA, -16L), class = c("tbl_df", "tbl", "data.frame"
), .Names = c("x", "y", "r"))
Run Code Online (Sandbox Code Playgroud)
如果要对此进行网络绘图,请执行以下操作:
library(igraph)
iris_igraph <- graph_from_data_frame(iris_cor)
Run Code Online (Sandbox Code Playgroud)
现在,如果我仅对涉及的相关性感兴趣,则Sepal.Length
不清楚如何有效地提取该信息。尝试这两种方法都不成功。第一个原因是错误,第二个原因是我仅获得了 …
我一直在试图弄清楚如何根据同一 data.frame 中另一列的值对因子进行排序。我一直在用这个问题作为我努力的基础:
在我的示例中,我喜欢ftor
set by的级别order_ID
。order_ID
只是订单的一个等级。这是我到目前为止所拥有的:
df <- data.frame(order_ID=c(5,3,1,4,2),
ftor=LETTERS[1:5])
df$ftor <- factor(df$ftor, levels=df[order(df$order_ID),], ordered=TRUE)
Run Code Online (Sandbox Code Playgroud)
这是我在上述尝试后尝试关卡时得到的结果:
> levels(df$ftor)
[1] "c(1, 2, 3, 4, 5)" "c(3, 5, 2, 4, 1)"
Run Code Online (Sandbox Code Playgroud)
基于order_ID
这里的价值是我所期待的:
> levels(df$ftor)
[1] "C" "B" "E" "D" "A"
Run Code Online (Sandbox Code Playgroud)
总之,任何人都可以推荐一种方法,我可以使用一列的级别来设置同一 data.frame 中另一个因素的级别?
非常方便的方法是迭代变量,然后根据该变量的值动态创建选项卡(此处homeworld
)。这与results: asis
chunk 选项配合得很好。purrr::walk
我可以做到这一点,但与 {gt} 包有一些奇怪的交互,因此我只能在使用 时才能使 gt 工作gt::as_raw_html
。但是,如果我只在外部生成一个表,purrr::walk
则不需要gt::as_raw_html
. 这是我收到的错误消息 {gt} 不起作用:
运行过滤器 /Applications/quarto/share/filters/quarto-pre/quarto-pre.lua 时出错:...lications/quarto/share/filters/quarto-pre/quarto-pre.lua:2410:尝试连接 nil值(本地“v”)堆栈回溯:...lications/quarto/share/filters/quarto-pre/quarto-pre.lua:2417:在函数 <...lications/quarto/share/filters/quarto-pre /quarto-pre.lua:2415>
这是要重现的四开本(四开本版本 1.1.175)代码:
---
title: "Untitled"
format: html
execute:
warning: false
---
```{r r-pkgs}
library(dplyr)
library(glue)
library(gt)
library(purrr)
## just to simplify
starwars <- starwars %>%
filter(!is.na(sex))
```
# Does work
::: {.panel-tabset}
```{r}
#| results: asis
walk(
unique(starwars$sex), \(hw) {
cat(glue("## {hw} \n\n"))
starwars %>%
filter(sex == hw) %>%
count(homeworld) %>% …
Run Code Online (Sandbox Code Playgroud) 我试图弄清楚如何使用 dplyr 通过几个函数来改变单列数据。我可以做每一列:
library(dplyr)
iris %>%
group_by(Species) %>%
mutate_all(funs(min, max))
Run Code Online (Sandbox Code Playgroud)
但我不知道如何选择一列。我可以想象这样的事情,尽管这显然不会运行:
iris %>%
group_by(Species) %>%
mutate(Sepal.Length, funs(min, max))
Run Code Online (Sandbox Code Playgroud)
我可以使用do()
一个像这样的自定义函数来完成这个任务:
summary_func = function(x){
tibble(max_out = max(x),
min_out = min(x)
)
}
iris %>%
group_by(Species) %>%
do(summary_func(.$Sepal.Length))
Run Code Online (Sandbox Code Playgroud)
然而,这并没有真正做我想做的事情,因为它没有添加到现有的 tibble a la 中mutate
。
有任何想法吗?