标签: tidyverse

为glm使用modelr :: add_predictions

我试图使用tidyverse和modelr包计算一组数据的逻辑回归预测.显然我做错了,add_predictions因为我没有收到后勤功能的"响应",就像我在统计数据中使用'预测'功能一样.这应该很简单,但我无法弄清楚,多次搜索产生的结果很少.

library(tidyverse)
library(modelr)
options(na.action = na.warn)
library(ISLR)

d <- as_tibble(ISLR::Default)
model <- glm(default ~ balance, data = d, family = binomial)
grid <- d %>% data_grid(balance) %>% add_predictions(model)

ggplot(d, aes(x=balance)) + 
    geom_point(aes(y = default)) + 
    geom_line(data = grid, aes(y = pred))
Run Code Online (Sandbox Code Playgroud)

r glm tidyverse modelr

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

我们应该在使用dplyr进行管道时使用大括号{}

我发现有些表达式只能在大括号(大括号{ })中使用,例如:

library(dplyr)
3 %>% {3 + .}
3 %>% {ifelse(. < 2, TRUE, FALSE)}
Run Code Online (Sandbox Code Playgroud)

在管道时使用花括号的原则是什么?我们何时应该使用它以及使用哪些表达式?

r dplyr magrittr tidyverse

9
推荐指数
0
解决办法
766
查看次数

读取多个CSV文件的基数R比读取器快

有很多关于如何读取多个CSV并将它们绑定到一个数据帧的文档.我有5000多个CSV文件需要读入并绑定到一个数据结构中.

特别是我在这里的讨论:使用rbind将多个.csv文件加载到R中的单个数据帧中的问题

奇怪的是,基础R比我尝试过的任何其他解决方案都要快得多.

这是我的CSV的样子:

> head(PT)
  Line          Timestamp       Lane.01 Lane.02 Lane.03 Lane.04 Lane.05 Lane.06 Lane.07 Lane.08
1    PL1    05-Jan-16 07:17:36      NA      NA      NA      NA      NA      NA      NA      NA
2    PL1    05-Jan-16 07:22:38      NA      NA      NA      NA      NA      NA      NA      NA
3    PL1    05-Jan-16 07:27:41      NA      NA      NA      NA      NA      NA      NA      NA
4    PL1    05-Jan-16 07:32:43    9.98   10.36   10.41   10.16   10.10    9.97   10.07    9.59
5    PL1    05-Jan-16 07:37:45    9.65    8.87    9.88    9.86    8.85    8.75    9.19    8.51
6    PL1    05-Jan-16 …
Run Code Online (Sandbox Code Playgroud)

r readr tidyverse

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

如何"以整齐的方式"将列重命名为变量名称

我创建了一个简单的数据框(dput如下):

    date      ticker     value
------------------------------
  2016-06-30  A2M.ASX   0.0686
  2016-07-29  A2M.ASX  -0.0134
  2016-08-31  A2M.ASX  -0.0650
  2016-09-30  A2M.ASX   0.0145
  2016-10-31  A2M.ASX   0.3600
  2016-11-30  A2M.ASX  -0.1429
Run Code Online (Sandbox Code Playgroud)

我想将value列的名称更改为我的metric变量名称中的任何内容,我想以某种dplyr方式执行此操作.

我的样本数据:

df = structure(list(date = c("2016-06-30", "2016-07-29", "2016-08-31", "2016-09-30", "2016-10-31", "2016-11-30"), ticker = c("A2M.ASX", "A2M.ASX", "A2M.ASX", "A2M.ASX", "A2M.ASX", "A2M.ASX"), value = c(0.0686, -0.0134, -0.065, 0.0145, 0.36, -0.1429)), .Names = c("date", "ticker", "value"), row.names = c(NA, 6L), class = "data.frame")
metric = "next_return"
Run Code Online (Sandbox Code Playgroud)

我知道如何在一行中做到这一点:

colnames(df)[3] = metric
Run Code Online (Sandbox Code Playgroud)

但我想以某种tidyverse …

r dplyr tidyverse

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

summarise_at为不同的变量使用不同的函数

当我在dplyr中使用group_by和summary时,我可以自然地将不同的汇总函数应用于不同的变量.例如:

    library(tidyverse)

    df <- tribble(
      ~category,   ~x,  ~y,  ~z,
      #----------------------
          'a',      4,   6,   8,
          'a',      7,   3,   0,
          'a',      7,   9,   0,
          'b',      2,   8,   8,
          'b',      5,   1,   8,
          'b',      8,   0,   1,
          'c',      2,   1,   1,
          'c',      3,   8,   0,
          'c',      1,   9,   1
     )

    df %>% group_by(category) %>% summarize(
      x=mean(x),
      y=median(y),
      z=first(z)
    )
Run Code Online (Sandbox Code Playgroud)

结果输出:

    # A tibble: 3 x 4
      category     x     y     z
         <chr> <dbl> <dbl> <dbl>
    1        a     6     6     8
    2        b     5     1 …
Run Code Online (Sandbox Code Playgroud)

r dplyr tidyverse

9
推荐指数
2
解决办法
2521
查看次数

用doMC替换并联plyr

考虑data.frame上的标准分组操作:

library(plyr)
library(doMC)
library(MASS) # for example

nc <- 12
registerDoMC(nc)

d <- data.frame(x = c("data", "more data"), g = c("group1", "group2"))
y <- "some global object"

res <- ddply(d, .(g), function(d_group) {
   # slow, complicated operations on d_group
}, .parallel = FALSE)
Run Code Online (Sandbox Code Playgroud)

通过简单地编写.parallel = TRUE来利用多核设置是微不足道的.这是我最喜欢的plyr功能之一.

但是,随着plyr被弃用(我认为)并且基本上被dplyr,purrr等取代,并行处理的解决方案变得更加冗长:

library(dplyr)
library(multidplyr)
library(parallel)
library(MASS) # for example

nc <- 12

d <- tibble(x = c("data", "more data"), g = c("group1", "group2"))
y <- "some global object"

cl <- create_cluster(nc)
set_default_cluster(cl)
cluster_library(cl, …
Run Code Online (Sandbox Code Playgroud)

r plyr dplyr tidyverse multidplyr

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

加入两个间隔不正确的数据帧?

我正在尝试找到重叠的间隔,并决定将间隔数据加入到自身中,dplyr::left_join()以便我可以将间隔与lubridate::int_overlaps()每个其他间隔进行比较.

这是我期望left_join()的表现方式.两个tibbles具有三行交叉以形成与9行:

library(tidyverse)

tibble(a = rep("a", 3), b = rep(1, 3)) %>% 
  left_join(tibble(a = rep("a", 3), c = rep(2, 3)))
Joining, by = "a"
# A tibble: 9 x 3
      a     b     c
  <chr> <dbl> <dbl>
1     a     1     2
2     a     1     2
3     a     1     2
4     a     1     2
5     a     1     2
6     a     1     2
7     a     1     2
8     a     1     2
9     a     1     2 …
Run Code Online (Sandbox Code Playgroud)

r lubridate dplyr tidyverse tibble

9
推荐指数
2
解决办法
235
查看次数

是否有相当于 tidyr nest 功能的熊猫?

tidyr::unnestR 语言中的方法与 Pandas 中的等效方法相同explode如此非常详细的答案中所述。我想知道是否有等效于 ?tidyr::nest` 的方法。

示例 R 代码:

library(tidyr)
iris_nested <- as_tibble(iris) %>% nest(data=-Species)
Run Code Online (Sandbox Code Playgroud)

数据列是一个列表列,其中包含数据框(这对于建模非常有用,例如在运行多个模型时)。

iris_nested
# A tibble: 3 x 2
  Species              data
  <fct>      <list<df[,4]>>
1 setosa           [50 × 4]
2 versicolor       [50 × 4]
3 virginica        [50 × 4]
Run Code Online (Sandbox Code Playgroud)

要访问数据列中的一个元素:

iris_nested[1,'data'][[1]]
[...]
# A tibble: 50 x 4
   Sepal.Length Sepal.Width Petal.Length Petal.Width
          <dbl>       <dbl>        <dbl>       <dbl>
 1          5.1         3.5          1.4         0.2
 2          4.9         3            1.4         0.2
 3          4.7         3.2          1.3         0.2
 4 …
Run Code Online (Sandbox Code Playgroud)

python r pandas tidyverse

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

累积 R 中每个可能组合的值

假设我有数据test(给定的 dput),其中 list-col 说items

test <- structure(list(items = list('a', c('b', 'c'), c('d', 'e'), 'f', c('g', 'h')),
               ID = c(1,1,1,2,2)), row.names = c(NA, 5L), class = "data.frame")

library(tidyverse)
test %>% group_by(ID) %>%
  mutate(dummy = accumulate(items, ~paste(.x, .y)))
Run Code Online (Sandbox Code Playgroud)

我得到一个像这样的 list-col 输出

  items ID        dummy
1     a  1            a
2  b, c  1     a b, a c
3  d, e  1 a b d, a c e
4     f  2            f
5  g, h  2     f g, f h …
Run Code Online (Sandbox Code Playgroud)

expand r dataframe accumulate tidyverse

9
推荐指数
4
解决办法
532
查看次数

在 R 中混合 [tidyverse] 和 [data.table] 语法的危险?

我从混合tidyversedata.table语法中得到了一些非常奇怪的行为。对于上下文,我经常发现自己使用tidyverse语法,然后data.table在需要速度与需要代码可读性时添加管道。我知道 Hadley 正在开发一个快速使用tidyverse语法的新包data.table,但据我所知,它仍处于初期阶段,所以我还没有使用它。

有人愿意解释这里发生了什么吗?这对我来说非常可怕,因为我可能不假思索地做了数千次。

library(dplyr); library(data.table)
DT <-
  fread(
    "iso3c  country income
MOZ Mozambique  LIC
ZMB Zambia  LMIC
ALB Albania UMIC
MOZ Mozambique  LIC
ZMB Zambia  LMIC
ALB Albania UMIC
"
  )

codes <- c("ALB", "ZMB")

# now, what happens if I use a tidyverse function (distinct) and then
# convert back to data.table?
DT <- distinct(DT) %>% as.data.table()

# this works like normal
DT[iso3c %in% codes]
# …
Run Code Online (Sandbox Code Playgroud)

r dplyr data.table tidyverse

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