标签: tidyverse

传播重复的标识符(使用tidyverse和%>%)

我的数据如下:

在此输入图像描述

我想让它看起来像这样:

在此输入图像描述

我想使用%>% - chaining在tidyverse中执行此操作.

df <- 
structure(list(id = c(2L, 2L, 4L, 5L, 5L, 5L, 5L), start_end = structure(c(2L, 
1L, 2L, 2L, 1L, 2L, 1L), .Label = c("end", "start"), class = "factor"), 
    date = structure(c(6L, 7L, 3L, 8L, 9L, 10L, 11L), .Label = c("1979-01-03", 
    "1979-06-21", "1979-07-18", "1989-09-12", "1991-01-04", "1994-05-01", 
    "1996-11-04", "2005-02-01", "2009-09-17", "2010-10-01", "2012-10-06"
    ), class = "factor")), .Names = c("id", "start_end", "date"
), row.names = c(3L, 4L, 7L, 8L, 9L, 10L, 11L), class = "data.frame")
Run Code Online (Sandbox Code Playgroud)

我尝试过的:

data.table::dcast( df, formula …
Run Code Online (Sandbox Code Playgroud)

r dplyr tidyr dcast tidyverse

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

合并包含NA的数据框中的行以生成完整的行

我知道这是一个重复的Q但我似乎无法再找到这个帖子

使用以下数据

df <- data.frame(A=c(1,1,2,2),B=c(NA,2,NA,4),C=c(3,NA,NA,5),D=c(NA,2,3,NA),E=c(5,NA,NA,4))

  A  B  C  D  E
  1 NA  3 NA  5
  1  2 NA  2 NA
  2 NA NA  3 NA
  2  4  5 NA  4
Run Code Online (Sandbox Code Playgroud)

分组A,我想使用tidyverse解决方案的以下输出

  A  B  C  D  E
  1  2  3  2  5
  2  4  5  3  4
Run Code Online (Sandbox Code Playgroud)

我有很多小组A.我想我看到了一个答案,coalesce但我不确定如何让它发挥作用.我想要一个同样适用characters解决方案.谢谢!

r coalesce tidyverse

10
推荐指数
3
解决办法
2699
查看次数

在嵌套数据框内使用filter()(和其他dplyr函数)和map()

我试图使用map()purrr包装应用filter()功能,存储在嵌套数据帧中的数据.

"你为什么不先过滤,然后窝? - 你可能会问.这会起作用(我会用这样的过程显示我想要的结果),但我正在寻找方法来做到这一点purrr.我想要只有一个数据框,有两个列表列,都是嵌套数据帧 - 一个是完整的,一个是过滤的.

我现在可以通过执行nest()两次来实现它:一次打开所有数据,第二次打开过滤数据:

library(tidyverse)

df <- tibble(
  a = sample(x = rep(c('x','y'),5), size = 10),
  b = sample(c(1:10)),
  c = sample(c(91:100))
)

df_full_nested <- df %>% 
  group_by(a) %>% 
  nest(.key = 'full')

df_filter_nested <- df %>%
  filter(c >= 95) %>%  ##this is the key step
  group_by(a) %>% 
  nest(.key = 'filtered')

## Desired outcome - one data frame with 2 nested list-columns: one full and one filtered.
## …
Run Code Online (Sandbox Code Playgroud)

r dplyr purrr tidyverse

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

计数数据除以年份和按地区划分的R

我有一个非常大(在Excel中打开太大)生物数据集,看起来像这样

    year <- c(1990, 1980, 1985, 1980, 1990, 1990, 1980, 1985, 1985,1990, 
              1980, 1985, 1980, 1990, 1990, 1980, 1985, 1985,
              1990, 1980, 1985, 1980, 1990, 1990, 1980, 1985, 1985)
    species <- c('A', 'A', 'B', 'B', 'B', 'C', 'C', 'C', 'A','A', 'A', 
                 'B', 'B', 'B', 'C', 'C', 'C', 'A', 'A', 'A', 'B', 'B', 'B', 
                 'C', 'C', 'C', 'A')
    region <- c(1, 1, 1, 3, 2, 3, 3, 2, 1, 1, 3, 3, 3, 2, 2, 1, 1, 1,1, 3, 3, 
                3, …
Run Code Online (Sandbox Code Playgroud)

grouping r data-management tidyverse

10
推荐指数
2
解决办法
127
查看次数

R install.packages 返回“错误:无法锁定目录”

[与14382209类似的问题,但那里的建议没有解决这个问题]

\n\n

在 Windows 7 工作计算机上新安装 R 4.0.0tidyverse会返回此经典的“无法创建锁定目录”错误

\n\n
 install.packages(\'tidyverse\')\nWARNING: Rtools is required to build R packages but is not currently installed. Please download and install the appropriate version of Rtools before proceeding:\n\nhttps://cran.rstudio.com/bin/windows/Rtools/\nInstalling package into \xe2\x80\x98\\\\ukbia04sfsrv002.a04.dt21.svcs.hp.com/users/A04/ocarrib/R/win-library/4.0\xe2\x80\x99\n(as \xe2\x80\x98lib\xe2\x80\x99 is unspecified)\nalso installing the dependencies \xe2\x80\x98highr\xe2\x80\x99, \xe2\x80\x98markdown\xe2\x80\x99, \xe2\x80\x98testthat\xe2\x80\x99, \xe2\x80\x98RColorBrewer\xe2\x80\x99, \xe2\x80\x98viridisLite\xe2\x80\x99, \xe2\x80\x98askpass\xe2\x80\x99, \xe2\x80\x98rematch\xe2\x80\x99, \xe2\x80\x98prettyunits\xe2\x80\x99, \xe2\x80\x98processx\xe2\x80\x99, \xe2\x80\x98knitr\xe2\x80\x99, \xe2\x80\x98yaml\xe2\x80\x99, \xe2\x80\x98htmltools\xe2\x80\x99, \xe2\x80\x98evaluate\xe2\x80\x99, \xe2\x80\x98base64enc\xe2\x80\x99, \xe2\x80\x98tinytex\xe2\x80\x99, \xe2\x80\x98xfun\xe2\x80\x99, \xe2\x80\x98backports\xe2\x80\x99, \xe2\x80\x98generics\xe2\x80\x99, \xe2\x80\x98reshape2\xe2\x80\x99, \xe2\x80\x98assertthat\xe2\x80\x99, \xe2\x80\x98glue\xe2\x80\x99, \xe2\x80\x98fansi\xe2\x80\x99, \xe2\x80\x98DBI\xe2\x80\x99, \xe2\x80\x98lifecycle\xe2\x80\x99, \xe2\x80\x98R6\xe2\x80\x99, \xe2\x80\x98tidyselect\xe2\x80\x99, \xe2\x80\x98ellipsis\xe2\x80\x99, \xe2\x80\x98pkgconfig\xe2\x80\x99, \xe2\x80\x98Rcpp\xe2\x80\x99, \xe2\x80\x98BH\xe2\x80\x99, \xe2\x80\x98plogr\xe2\x80\x99, \xe2\x80\x98digest\xe2\x80\x99, \xe2\x80\x98gtable\xe2\x80\x99, \xe2\x80\x98isoband\xe2\x80\x99, \xe2\x80\x98scales\xe2\x80\x99, …
Run Code Online (Sandbox Code Playgroud)

r install.packages tidyverse

10
推荐指数
2
解决办法
2万
查看次数

R:使用 3D 数组(纬度、经度和时间)随时间计算函数的最佳方法是什么?

我经常使用大型 3D 数组(纬度、经度和时间),例如 720x1440x480 的大小。通常,我需要对每个纬度和经度随时间进行操作,例如,获取平均值(导致 2D 数组)或及时获取滚动平均值(导致 3D 数组),或更复杂的函数。

我的问题是:哪种包装(或方式)最有效和最快?

我知道一个选项是基础 R,使用 apply 函数和滚动函数与提供 rollapply 函数的包 zoo 混合。另一种方式是使用 tidyverse,另一种方式是使用 data.table。以及这些包之间的组合。但有没有最快的?

例如,如果我有这个数据立方体:

data <- array(rnorm(721*1440*480),dim = c(721,1440,480))
Run Code Online (Sandbox Code Playgroud)

哪些维度是纬度、经度和时间,如下所示:

lat <- seq(from = -90, to = 90, by = 0.25)
lon <- seq(from = 0, to = 359.75, by = 0.25)
time <- seq(from = as.Date('1980-01-01'), by = 'month', length.out = 480)
Run Code Online (Sandbox Code Playgroud)

我通常需要做这样的事情(这是在基础 R + 动物园):

# Average in time
average_data <- apply(data, 1:2, mean)

# Rolling mean, width of window = …
Run Code Online (Sandbox Code Playgroud)

arrays r data.table tidyverse

10
推荐指数
2
解决办法
261
查看次数

我们应该在使用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
查看次数

用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
查看次数