小编los*_*ost的帖子

使R的View()自动在新窗口中打开

我喜欢使用R中View()调用的源代码编辑器/数据查看器。我使用多个监视器,当我在RStudio主窗口中编写代码时,在侧面监视器上打开一个或两个查看器真的很不错。如果要查看多个数据框,必须先执行View(df),然后单击要查看的每个数据框的“在新窗口中显示”按钮,这有点不方便。

我想知道是否可以将某种包装材料放在一起,或者将某些设置藏在某个地方,这样可以做到,所以当我调用View()时,查看器会自动在新窗口中打开。有任何想法吗?

r viewer rstudio

16
推荐指数
2
解决办法
1488
查看次数

如何在`mutate`中的`map`中取消引号(!!)

我正在foo使用map2和修改嵌套的数据框mutate,并且我想根据来在每个嵌套的数据框中命名一个变量foo$name。我不确定nse/ tidyeval取消引号的正确语法在这里。我的尝试:

library(tidyverse)

foo <- mtcars %>%
  group_by(gear) %>%
  nest %>%
  mutate(name = c("one", "two", "three")) %>%
  mutate(data = map2(data, name, ~
                       mutate(.x, !!(.y) := "anything")))
#> Error in quos(...): object '.y' not found
Run Code Online (Sandbox Code Playgroud)

我希望嵌套数据框中的新创建变量的名称分别为“一个”,“两个”和“三个”。

如果我对normal mutate进行普通操作df,那么我将基于普通语法使用我的尝试,name字符串在哪里:

name <- "test"
mtcars %>% mutate(!!name := "anything") # works fine
Run Code Online (Sandbox Code Playgroud)

如果成功,则以下行应返回TRUE

foo[1,2] %>% unnest %>% names %>% .[11] == "one"
Run Code Online (Sandbox Code Playgroud)

r dplyr purrr tidyeval rlang

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

在 ggplot 比例函数中引用数据集变量的正确方法是什么?

我的问题与此类似(我想对轴上的标签使用任意文本),但ggplot我不想将值硬编码到函数中,而是想通过引用源数据集中存在的变量来提供它们。

我一直使用的解决方案是将所有ggplot代码包装在大括号内,将源数据集通过管道传输到其中,并使用以下方式引用变量.$

library(tidyverse)

tribble(
  ~description, ~y, ~x,
  "apples", 3.4, 1.1,
  "oranges", 5.6, 2.4,
  "mangos", 2.3, 4.8
) %>%
  {ggplot(data = ., aes(y = y, x = x)) +
      scale_x_continuous(
        breaks = .$x,
        labels = .$description
      ) +
      geom_point() + geom_line()}
Run Code Online (Sandbox Code Playgroud)

这可行,但感觉像是一种解决方法。有没有规范/正确/更干净/更好的方法来做到这一点?我一直试图在文档中找到答案,但无法找到正确的关键字来描述这种情况。

(我知道这个情节是胡说八道。)

r ggplot2

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

在 purrr:walk() 中使用assign()

我有许多数据框和一系列我想对它们中的每一个进行的更改。对于此示例,让所需的更改只是使用as_tibble. 我知道有多种方法可以做到这一点,但我想使用purrr:walk.

对于数据框df1df2

df1 <- mtcars
df2 <- mtcars
Run Code Online (Sandbox Code Playgroud)

我想做相当于

df1 %<>% as_tibble
df2 %<>% as_tibble
Run Code Online (Sandbox Code Playgroud)

使用walk. 我的尝试:

library(tidyverse)
walk(c(df1, df2), ~ assign(deparse(substitute(.)), as_tibble(.)))
Run Code Online (Sandbox Code Playgroud)

这会运行但不会进行所需的更改:

is_tibble(df1)
#> [1] FALSE
Run Code Online (Sandbox Code Playgroud)

r dplyr nse purrr

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

卷曲整洁的评估编程,具有多个输入和跨列的自定义函数

我的问题与this 问题类似,但我需要跨列应用更复杂的函数,并且我不知道如何将 Lionel 建议的解决方案应用到具有作用域动词 likefilter_at()filter()+across()等价物的自定义函数。{{{}}}看起来并没有引入“superstache”/运算符。

这是我想要做的一个非编程示例(不使用 NSE):

library(dplyr)
library(magrittr)

foo <- tibble(group = c(1,1,2,2,3,3),
              a = c(1,1,0,1,2,2),
              b = c(1,1,2,2,0,1))

foo %>%
  group_by(group) %>%
  filter_at(vars(a,b), any_vars(n_distinct(.) != 1)) %>%
  ungroup
#> # A tibble: 4 x 3
#>   group     a     b
#>   <dbl> <dbl> <dbl>
#> 1     2     0     2
#> 2     2     1     2
#> 3     3     2     0
#> 4     3     2     1
Run Code Online (Sandbox Code Playgroud)

我还没有找到filter_atfilter+相同的行across() …

r dplyr non-standard-evaluation tidyeval rlang

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

dplyr mutate_at和case_when

我想用starts_with()识别变量,然后执行case_when变异.

例如,假设我想做相同的:

mtcars$mpg[mtcars$mpg == 21.0] <- 5; mtcars
Run Code Online (Sandbox Code Playgroud)

我的尝试:

mtcars %>%
  mutate_at(
    vars(starts_with("mpg")),
    funs(. = case_when(
      . == 21.0 ~ 5,
      TRUE ~ .
    ))
  )
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?dplyr文档似乎没有很多mutate_at/mutate_each的例子(这个线程看起来有同样的抱怨),所以我很难用这些函数.也许我不是在寻找合适的地方?

我知道这个帖子但是在那里找不到解决方案.

谢谢!

r dplyr mutate

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

dplyr用case_when改变新的动态变量

我在这里这里都知道类似的问题,但我无法找到适合我具体情况的正确解决方案.我发现的一些是使用mutate_等的解决方案,但我知道这些现在已经过时了.我对dplyr的动态用法不熟悉.

我有一个数据框,其中包含一些带有两个不同前缀的变量,alpha和beta:

df <- data.frame(alpha.num = c(1, 3, 5, 7),
             alpha.char = c("a", "c", "e", "g"),
             beta.num = c(2, 4, 6, 8),
             beta.char = c("b", "d", "f", "h"),
             which.to.use = c("alpha", "alpha", "beta", "beta"))
Run Code Online (Sandbox Code Playgroud)

我想创建前缀为"selected"的新变量.它们是"alpha"或"beta"列的副本,具体取决于在"which.to.use"列中为该行命名的列.期望的输出是:

desired.df <- data.frame(alpha.num = c(1, 3, 5, 7),
                     alpha.char = c("a", "c", "e", "g"),
                     beta.num = c(2, 4, 6, 8),
                     beta.char = c("b", "d", "f", "h"),
                     which.to.use = c("alpha", "alpha", "beta", "beta"),
                     chosen.num = c(1, 3, 6, 8),
                     chosen.char …
Run Code Online (Sandbox Code Playgroud)

r dynamic dplyr mutate

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

dplyr在mutate中使用rowwise和df-wise值

如何执行rowwise使用其他行的值的操作(以dplyr/tidy样式)?假设我有这个df:

df <- data_frame(value = c(5,6,7,3,4),
                 group = c(1,2,2,3,3),
                 group.to.use = c(2,3,3,1,1))
Run Code Online (Sandbox Code Playgroud)

我想创建一个新变量new.value,它等于每行的当前值加上"group"等于该行的"group.to.use"的行的最大值.所以对于第一行

new.value = 5 + (max(value[group === 2])) = 5 + 7 = 12

期望的输出:

# A tibble: 5 x 4
  value group group.to.use new.value
  <dbl> <dbl>        <dbl>     <dbl>
1    5.    1.           2.       12.
2    6.    2.           3.       10.
3    7.    2.           3.       11.
4    3.    3.           1.        8.
5    4.    3.           1.        9.
Run Code Online (Sandbox Code Playgroud)

伪代码:

df %<>%
  mutate(new.value = value + max(value[group.to.use == <group.for.this.row>]))
Run Code Online (Sandbox Code Playgroud)

r dplyr mutate

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

dplyr在mutate()中使用select()帮助器

我将创建一个新变量,它表示许多其他变量的总和(或其他函数),这些变量都以"prefix_"开头.有没有办法使用这些select()助手(例如starts_with())整齐地做到这一点?

我不认为 mutate_at()适用于此,因为我只是试图基于许多现有变量创建一个新变量.

我的尝试:

df %<>%
  mutate(newvar = sum(vars(starts_with("prefix_"))))
Run Code Online (Sandbox Code Playgroud)

这当然不起作用.非常感谢!

一个可重复的例子:

mtcars %<>% 
  rename("prefix_mpg" = mpg) %>% 
  rename("prefix_cyl" = cyl) %>% 
  mutate(newvar = sum(var(starts_with("prefix_"))))
Run Code Online (Sandbox Code Playgroud)

预期输出将是mtcars $ newvar,它是prefix_mpg和prefix_cyl的总和.当然我可以只明确命名mpg和cyl,但在我的实际情况中它是一个很长的变量列表,太长了,不方便命名.

r dplyr mutate

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

group_by n变量的唯一顺序值

group_by变量的唯一值很容易:

library(tidyverse)
library(gapminder)
gapminder %>%
  group_by(year)
Run Code Online (Sandbox Code Playgroud)

如果我们想创建一个组ID只是为了向我们展示这些组将是什么:

gapminder %>% 
  select(year) %>% 
  distinct %>%
  mutate(group = group_indices(., year))
A tibble: 12 x 2
    year group
   <int> <int>
 1  1952     1
 2  1957     2
 3  1962     3
 4  1967     4
 5  1972     5
 6  1977     6
 7  1982     7
 8  1987     8
 9  1992     9
10  1997    10
11  2002    11
12  2007    12
Run Code Online (Sandbox Code Playgroud)

但是,如果我想按顺序分组("group2"),三胞胎("group3")等分组呢?我怎么能用dplyr/ tidyverse?产生以下的tibble ?

A tibble: 12 x 2
    year group group2 group3 group5
   <int> …
Run Code Online (Sandbox Code Playgroud)

r dplyr

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

R 调查包中的多核参数

当尝试使用multicore = TRUERsurvey包中的参数时,出现以下错误:

Error in glm.control(multicore = TRUE) :
  unused argument (multicore = TRUE)
Run Code Online (Sandbox Code Playgroud)

复制示例代码:

library(tidyverse)
library(survey)

mtcars %<>%
  mutate(weights = 1) %>%
  mutate(id = ceiling(row_number()/2)) %>%
  mutate(strata = ceiling(row_number()/4))

design <- svydesign(id =~ id, weights =~ weights, strata =~ strata,
                data = mtcars)

model <- svyglm(design = design, mpg ~ drat + wt + qsec,
            multicore=TRUE)
Run Code Online (Sandbox Code Playgroud)

mutlicore确实作为一个可能的参数出现在 的文档中svyglm该线程表明该参数可能不适用于 Windows,但我正在 Unix 系统上运行它。

我知道该multicore软件包已被弃用,以支持,并且此处的parallel文档表明该软件包已更新以反映此更改(请参阅修订版 3.29-5),但我不确定是否或如何涉及此问题。survey

我还尝试使用 …

parallel-processing r survey

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

将向量输送到 all() 以测试相等性

我正在尝试将向量通过管道传输到all()语句中,以检查所有元素是否都等于某个值。我想我需要使用展示管道,%$%因为all()没有内置的数据参数。我的尝试导致错误:

library(tidyverse)
library(magrittr)

vec <- c("a", "b", "a")

vec %>%
  keep(!grepl("b", .)) %$%
  all(. == "a")
#> Error in eval(substitute(expr), data, enclos = parent.frame()): invalid 'envir' argument of type 'character'
Run Code Online (Sandbox Code Playgroud)

如果我之前打破管道all()并将输出分配给一个 object p,然后作为第二个命令传递pall()它,它工作正常:

vec %>%
  keep(!grepl("b", .)) -> p

all(p == "a")
#> [1] TRUE
Run Code Online (Sandbox Code Playgroud)

我不明白为什么这有效,而我的第一次尝试却没有。我希望能够在导致TRUE.

如果vec改为 atibble以下工作:

vec <- tibble(var = c("a", "b", "a"))

vec %>%
  filter(!grepl("b", var)) %$%
  all(.$var …
Run Code Online (Sandbox Code Playgroud)

r dplyr magrittr purrr

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