【发布时间】:2017-02-22 19:57:13
【问题描述】:
我发现自己处于 grep() 函数的极限,或者也许有有效的方法来做到这一点。
开始一个示例数据框:
Date <- c( "31-DEC-2014","31-DEC-2014","31-DEC-2014","30-DEC-2014",
"30-DEC-2014","30-DEC-2014", "29-DEC-2014","29-DEC-2014","29-DEC-2014" )
ISIN <- c("LU0168343191", "TW0002418001", "GB00B3FFY088","LU0168343191",
"TW0002418001", "GB00B3FFY088","LU0168343191", "TW0002418001", "GB00B3FFY088")
price <-c(seq(1:9))
df <- as.data.frame(cbind(Date, ISIN, price))
所需的结果是一个 list() 包含主数据文件的子集,如下所示(Result_I 中的 3 个单独标识符的 x3)
想法是数据应首先按 ISIN 过滤,然后然后按日期过滤。这两个步骤的过程应该保持我的数据完好无损。
Result_d <- c("31-DEC-2014", "30-DEC-2014","29-DEC-2014")
Result_I <- c("LU0168343191","LU0168343191","LU0168343191")
Result_P <- c(1,4,7)
Result_df <- cbind(Result_d, Result_I, Result_P)
请保持上述内容用于演示目的,真实数据集在 450 多个不同日期期间有 500 万行和 50 列,根据Result_d,所以我正在寻找适用的东西,而与 nrow 无关或 ncol
到目前为止我所拥有的:
我记录所有唯一的日期并存储:
Unique_Dates <- unique(df$Date)
标识符相同:
Unique_ID <- unique(df$ISIN)
现在是 grepping 问题:
如果我想要所有包含 Unique_Dates 的行,我会这样做:
pattern <- paste(Unique_dates, collapse = "|")
result <- as.matrix(df[grep(pattern, df$Date),])
这将基本上检索整个数据集。我想知道是否有人知道这样做的有效方法。
提前致谢。
【问题讨论】:
-
df %>% dplyr::filter(grepl(pattern = "LU", ISIN))对于日期和范围,请使用lubridate -
您似乎只想保留每个日期的第一行,所以:
df[!duplicated(df$Date),]也许? -
您的代码输出错误。它也仅限于“LU”,我在这里有大约 8000 个唯一 ID。我在同一日期也有多个相同 ID 的条目,因此应用唯一的日期过滤器很重要
-
Maximus,为了保持数据质量,重要的是它们首先按 ID 过滤 1,然后按日期过滤
-
Alex,试着更好地描述你的输出是如何计算的。