仅供参考我已经简化了实际问题
说我有一个矩阵,即 日期和列/行名称
2012-08-06 2012-08-13 2012-08-20 2012-08-27
2012-08-06 1.0 1.0 1.0 1.0
2012-08-13 1.0 1.0 1.0 1.0
2012-08-20 1.0 1.0 1.0 1.0
2012-08-27 1.0 1.0 1.0 1.0
我有一个参考日期,我想要提取所有大于或等于此参考日期的数据。即如果参考日期是2012-08-13,那么我想要这些数据:
2012-08-06 2012-08-13 2012-08-20 2012-08-27
2012-08-06
2012-08-13 1.0 1.0 1.0
2012-08-20 1.0
2012-08-27 1.0
我实际上是通过单独执行行和列来实现此目的,并且对我来说效果很好 即使用逻辑 数据[rownames(data)<引用,colnames(data)== reference]获取列和类似的东西来获取行
然而,我想要的是参考查询(所以不只是多个日期的一个值,即如果我有两个日期
reference = c("2012-08-13","2012-08-20")
然后我需要获取的值必须是:
2012-08-06 2012-08-13 2012-08-20 2012-08-27
2012-08-06
2012-08-13 1.0 1.0 1.0
2012-08-20 1.0 1.0 1.0
2012-08-27 1.0 1.0
我想最终用符合此条件的其他内容替换1.0&#c>
有人可以帮我将行/列名称引用到查找向量中吗? 我的最终目标是实际使用我保留为1.0的行/列来将这些数字替换为其他计算字段(在原始矩阵中)
由于
答案 0 :(得分:1)
这是一个很好的选择。其思想是对每个参考执行操作,用NA替换不需要的行和列(即参考之前的那些)。这就是f
的作用。然后,使用函数g
组合为每个参考获得的数据帧。
d <- structure(c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1), .Dim = c(4L,
4L), .Dimnames = list(c("2012-08-06", "2012-08-13", "2012-08-20",
"2012-08-27"), c("2012-08-06", "2012-08-13", "2012-08-20", "2012-08-27"
)))
f <- function(d, ref) {
d[-which(rownames(d) == ref), -which(colnames(d) == ref)] <- NA
d
}
g <- function(d1, d2) {
d1[is.na(d1) & !is.na(d2)] <- 1
d1
}
refs <- sort(c("2012-08-13", "2012-08-20")) # must be sorted
dlist <- lapply(refs, f, d = d)
res <- Reduce(g, dlist)
res[rownames(res) < min(refs), ] <- NA
res[, colnames(res) < min(refs)] <- NA
res
# 2012-08-06 2012-08-13 2012-08-20 2012-08-27
# 2012-08-06 NA NA NA NA
# 2012-08-13 NA 1 1 1
# 2012-08-20 NA 1 1 1
# 2012-08-27 NA 1 1 NA