小编bos*_*hek的帖子

根据dplyr 0.7.0中的多个属性条件选择列

我试图找出如何有效地选择列使用dplyr::select_if.starwarsdplyr 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)

r dplyr

4
推荐指数
2
解决办法
994
查看次数

使用`devtools :: build_vignette`编译一个插图,以便.md保存在vignettes目录中

我正在尝试编译一个包装插图,使.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)

vignette r devtools

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

将重叠间隔与 lubridate 结合

我希望合并润滑间隔,以便如果它们重叠,则从内部第一个时间获取最小值和从内部最后一个时间获取最大值并总结以创建一个跨越整个时间段的新间隔。这是一个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 lubridate dplyr

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

将 R 对象传递给四开本中的 Observable

我正在尝试在四开文档中一起使用 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)

r quarto

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

计算数据帧的一列中的所有NA值

我希望生成一个采用数据帧的表,计算每列中的所有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值的表的任何想法?

提前致谢

r dplyr

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

汇总数据框以包括分组中的所有唯一值

我想总结一个数据框,以便列包含特定组中唯一值的字符串.所以使用虹膜数据集:

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解决方案.这就是我正常工作的方式.

提前致谢.

r dataframe dplyr

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

用ggplot2编写一个简单的函数

我是编写函数的新手,因此我无法想象这一点也就不足为奇了.我只想生成一个简单的函数,其中一个指定数据帧和你想要的变量,然后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)

我在这里做错了什么建议?显然这是一个微不足道的例子,我希望将其扩展到更广泛的用途.

提前致谢.

r function ggplot2

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

访问工作目录之外的文件而不引用完整路径

这是一个愚蠢的例子,但我不知道如何解决这个问题。希望这能说明我的问题。我在 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
  • 无法使用完整路径,因为该部分(特别是驱动器)将是可变的
  • 无法移动数据

我希望这是有道理的

r relative-path

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

将 rmarkdown 中的参数传递给文本或标题

有没有办法在代码块之外的 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)

有没有人对此有任何想法?

r r-markdown

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

将igraph对象子集化为边的名称

考虑一个将每个变量彼此关联的数据帧:

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不清楚如何有效地提取该信息。尝试这两种方法都不成功。第一个原因是错误,第二个原因是我仅获得了 …

r subset igraph

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

根据另一列的数值设置因子的级别

我一直在试图弄清楚如何根据同一 data.frame 中另一列的值对因子进行排序。我一直在用这个问题作为我努力的基础:

R - 根据一个或多个其他列中的值对因子进行排序

在我的示例中,我喜欢ftorset by的级别order_IDorder_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 中另一个因素的级别?

r

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

迭代以四开本中的 gt 创建选项卡

非常方便的方法是迭代变量,然后根据该变量的值动态创建选项卡(此处homeworld)。这与results: asischunk 选项配合得很好。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)

tidyverse gt quarto

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

dplyr::mutate 一列上的多个函数

我试图弄清楚如何使用 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

有任何想法吗?

r dplyr

0
推荐指数
1
解决办法
2132
查看次数