【问题标题】:R combining multiple vectors created using dplyr's pullR 组合使用 dplyr 的 pull 创建的多个向量
【发布时间】:2021-05-31 12:45:34
【问题描述】:

我有 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)

出了什么问题?

【问题讨论】:

  • 请考虑附上一个最小可重现的例子,回忆一下:stackoverflow.com/help/minimal-reproducible-example
  • 如果您指定频率以及开始和结束,似乎可以正常工作 - ts(1:26, frequency=12, start=c(2019,1), end=c(2021,2))
  • @thelatemail ..谢谢!它可以工作,但是我的向量的顺序被弄乱了,一些值完全丢失了。这是我的代码:in.sample
  • @user12715151 - 我无法复制您的问题 - 我得到了从 1 到 26 的序列,每个序列都在指定期间的不同月份。您将必须提供您正在输入的x 向量,以及您在上述问题中获得的输出,以便我们深入了解问题。
  • @thelatemail。我测试了向量,它的长度是 14 而不是我想的 26,并且每个位置,例如 x[12] 包含两个值而不是一个。这是我的代码,对不起,我试过了,但不知道如何格式化它 -#Selecting only 2021: ` X2021% pull(X2021) #deleting all months for which no actuals yet, march on在这种情况下 X2021% pull(X2019,X2020) #26 个实际数据点,预测接下来的 10 个步骤 x

标签: r dplyr time-series


【解决方案1】:

由于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"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-27
    • 2016-05-20
    • 1970-01-01
    • 1970-01-01
    • 2018-08-26
    • 2019-06-14
    相关资源
    最近更新 更多