R语言两个字符串数组的叉积组合
R language cross-product combination of two string arrays
假设我有两个数组 a 和 b:
a=seq(2013,2015)
b=c('-03-31','-06-30')
我想将 a 中的每个元素与 b 中的每个元素组合起来。结果应该是一个数组,如下所示:
"2013-03-31" "2013-06-30" "2014-03-31" "2014-06-30" "2015-03-31" "2015-06-30"
我该怎么做?
你可以试试
c(outer(a, b, FUN=paste0))
#[1] "2013-03-31" "2014-03-31" "2015-03-31" "2013-06-30" "2014-06-30"
#[6] "2015-06-30"
或者
do.call(paste0,expand.grid(a,b))
或
sprintf('%s%s', rep(a, length(b)), rep(b, length(a)))
如果您想要一个字符向量作为结果,akrun 的示例可以很好地工作,但是它们并不容易处理该对的每一侧。
此函数将为您提供包含两个集合的叉积的列表:
cross <- function(x, y = x) {
result <- list()
for (a in unique(x)) {
for (b in unique(y)) {
result <- append(result, list(list(left = a, right = b)))
}
}
result
}
示例:
cross(c(1, 2, 3), c("a", "b", "c"))
假设我有两个数组 a 和 b:
a=seq(2013,2015)
b=c('-03-31','-06-30')
我想将 a 中的每个元素与 b 中的每个元素组合起来。结果应该是一个数组,如下所示:
"2013-03-31" "2013-06-30" "2014-03-31" "2014-06-30" "2015-03-31" "2015-06-30"
我该怎么做?
你可以试试
c(outer(a, b, FUN=paste0))
#[1] "2013-03-31" "2014-03-31" "2015-03-31" "2013-06-30" "2014-06-30"
#[6] "2015-06-30"
或者
do.call(paste0,expand.grid(a,b))
或
sprintf('%s%s', rep(a, length(b)), rep(b, length(a)))
如果您想要一个字符向量作为结果,akrun 的示例可以很好地工作,但是它们并不容易处理该对的每一侧。
此函数将为您提供包含两个集合的叉积的列表:
cross <- function(x, y = x) {
result <- list()
for (a in unique(x)) {
for (b in unique(y)) {
result <- append(result, list(list(left = a, right = b)))
}
}
result
}
示例:
cross(c(1, 2, 3), c("a", "b", "c"))