背景:
我正在尝试根据子集公式过滤大型数据集的列,问题是,我正在使用列的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)
这种问题有解决办法吗?
答案 0 :(得分:1)
subset
过滤行而不是列。
要过滤列,您可以使用正则表达式来匹配要选择的列。
例如,要匹配名称以01
,02
或03
结尾的列,您可以
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)