我已经将我想要组合的矢量命名如下:
v1 <- c(0,1,2,3)
v2 <- c(0,1,2,3)
v3 <- c(0,1,2,3)
names(v1) <- c("This","is","an","example")
names(v2) <- c("This","great","value","random")
names(v3) <- c("This","This","and","This")
v1和v2的预期结果:
This is an example great value random
0 1 2 3 1 2 3
和v1和v3:
This is an example This and This
0 1 2 3 1 2 3
如您所见,如果名称不同,矢量就会绑定在一起。如果在结果向量中存在多个名称的出现,如果相应的值相同则保持一次,但如果值与每次出现的值不同则保持多次。 我不知道我是否明确表达了我想要实现的目标。
这是实现这样的方式吗? 谢谢
答案 0 :(得分:4)
我会做一个辅助函数,如下所示:
plt.hist()
重点是比较名称和值,我发现最简单的方法是将其放入Combiner <- function(vec1, vec2, vecOut = TRUE) {
temp <- unique(rbind(data.frame(as.table(vec1)),
data.frame(as.table(vec2))))
if (isTRUE(vecOut)) setNames(temp$Freq, temp$Var1)
else temp
}
的形式。
然后用法:
data.frame
对于任意数量的向量,您可以将函数修改为:
Combiner(v1, v2)
# This is an example great value random
# 0 1 2 3 1 2 3
Combiner(v1, v3)
# This is an example This and This
# 0 1 2 3 1 2 3
虽然第一个版本只能使用数字命名向量(因为它使用Combiner <- function(..., vecOut = TRUE) {
dots <- list(...)
if (any(is.null(sapply(dots, names)))) stop("All vectors must be named")
temp <- unique(do.call(rbind, lapply(dots, function(x) {
data.frame(Name = names(x), Value = unname(x), stringsAsFactors = FALSE)
})))
if (isTRUE(vecOut)) setNames(temp$Value, temp$Name)
else temp
}
),但第二个版本也应该使用命名字符向量。