如何在R中为data.frame分配特定日期格式(Xyyyymm)的id.columns?

时间:2018-04-03 11:29:59

标签: r

背景:

我正在尝试根据子集公式过滤大型数据集的列,问题是,我正在使用列的id号而不是列的实际名称等于日期(在这种格式:Xyyyymm)这肯定会在操作id.columns和所需的时间框架时给我带来麻烦。

数据集的小样本表代码:

   company <- c("AML Steels Ltd.", "Information  Ltd.", "Enterprises Ltd.") 
   X200201 <- c("A","A","F")
   X200202 <- c("A","B","F")
   X200203 <- c("C","B","F")
   X200204 <- c("E","F","D")
   X200205 <- c("C","A","F")
   X200206 <- c("A","F","C")

    df <- data.frame(company, X200201, X200202, X200203, X200204, X200205, X200206, stringsAsFactors = F)

用于过滤id.columns的实际代码(示例):

df1=as.data.frame((subset(df, select = -(2:3))), stringAsFactors = F)

这种问题有解决办法吗?

1 个答案:

答案 0 :(得分:1)

subset过滤行而不是列。

要过滤列,您可以使用正则表达式来匹配要选择的列。

例如,要匹配名称以010203结尾的列,您可以

df[, grep("(01$|02$|03$)", colnames(df))];
#  X200201 X200202 X200203
#1       A       A       C
#2       A       B       B
#3       F       F       F

或者,您可以定义一个函数,将列名转换为as.Date的日期,然后返回落在特定日期间隔内的列的列索引。

更新

让我们定义一个函数,让您在start格式中指定end%Y%m日期,并根据df选择列library(zoo); sel.col <- function(start, end, df) { dates <- as.yearmon(sub("X", "", colnames(df)[-1]), "%Y%m"); start <- as.yearmon(start, "%Y%m"); end <- as.yearmon(end, "%Y%m"); which(dates >= start & dates <= end) + 1; } }}

df[, sel.col("200201", "200203", df)]
#  X200201 X200202 X200203
#1       A       A       C
#2       A       B       B
#3       F       F       F

以下代码行选择日期位于2002年1月和2002年3月的列。

import os,time,os.path,shutil
shutil.copytree(sourceFolderPath, destinationFolderPath)