【问题标题】:Loop over even/odd columns & stack them under specific ones循环偶数/奇数列并将它们堆叠在特定列下
【发布时间】:2021-12-13 02:25:47
【问题描述】:

我有以下来自 Douglas Montgomery 的书时间序列分析与预测简介的数据集:

我从这个电子表格创建了一个名为 pharm 的数据框。我们只有两个变量,但它们在几列中重复。我想将所有奇数的“周”列从第 2 列中取出,并按顺序将它们堆叠在第 1 周列下。相反,我想对偶数“销售额,以千计”列做同样的事情。到目前为止,这是我尝试过的:

pharm2 <- data.frame(week=c(pharm$week, pharm[,3], pharm[,5], pharm[,7]), sales=c(pharm$sales, pharm[,4], pharm[,6], pharm[,8]))

这很有效,因为列不多,但我需要一种更有效的方法,因为硬编码对于很多列并不实用。有谁知道更有效的方法吗?

【问题讨论】:

    标签: r loops


    【解决方案1】:

    如果列是交替的,只需使用回收逻辑向量进行子集,unlist 并创建一个新的 data.frame

    out <- data.frame(week = unlist(pharm[c(TRUE, FALSE)]),
               sales = unlist(pharm[c(FALSE, TRUE)]))
    

    【讨论】:

    • 非常感谢您的快速回复!这解决了问题。
    【解决方案2】:

    您可以使用seq 函数生成序列以提取交替列。

    pharm2 <- data.frame(week = unlist(pharm[seq(1, ncol(pharm), 2)]), 
                         sales = unlist(pharm[seq(2, ncol(pharm), 2)]))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-08-12
      • 2011-04-30
      • 1970-01-01
      • 2012-10-10
      • 2020-10-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多