首页 > 解决方案 > R 组合使用 dplyr 的 pull 创建的多个向量

问题描述

我有 2019 年、2020 年的月度数据,而 2021 年(1 月和 2 月)只有 2 个月的数据。我想将这 26 个值组成一个向量用作时间序列。

my_dat <- data.frame(X2021 = c(1:2,rep(NA,10)), X2020 = 1:12, X2019 = 1:12)
library(dplyr)
X2021 <- my_dat %>% pull(X2021)
X2021 <- X2021[ -(3:12) ]

x <- my_dat %>% pull(X2019,X2020)

c(x, X2021)

##1  2  3  4  5  6  7  8  9 10 11 12       
##1  2  3  4  5  6  7  8  9 10 11 12  1  2

我期望:

c(1:12, 1:12, 1:2)

什么地方出了错?

标签: rdplyrtime-series

解决方案


由于pull相当于$在基础 R 中,并且只能用于提取一个变量,我想你想要select然后unlist. 例如:

my_dat %>% select(X2019, X2020) %>% unlist(use.names=FALSE)
#[1]  1  2  3  4  5  6  7  8  9 10 11 12  1  2  3  4  5  6  7  8  9 10 11 12

这相当于使用[]基数 R 中的方括号:

unlist(my_dat[c("X2019","X2020")], use.names=FALSE)
#[1]  1  2  3  4  5  6  7  8  9 10 11 12  1  2  3  4  5  6  7  8  9 10 11 12

至于为什么原始代码不起作用,?pull显示语法是:

pull(.data, var, name)

所以

my_dat %>% pull(X2019,X2020)

只是拉/提取X2019和命名它X2020。举一个更清楚的例子:

dat <- data.frame(a=1:3, b=month.abb[1:3])
pull(dat, a, b)
#Jan Feb Mar 
#  1   2   3 
unname(pull(dat, a, b))
#[1] 1 2 3
names(pull(dat, a, b))
#[1] "Jan" "Feb" "Mar"

推荐阅读