命名向量的组合

时间:2015-04-25 11:03:43

标签: r vector

我已经将我想要组合的矢量命名如下:

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

如您所见,如果名称不同,矢量就会绑定在一起。如果在结果向量中存在多个名称的出现,如果相应的值相同则保持一次,但如果值与每次出现的值不同则保持多次。 我不知道我是否明确表达了我想要实现的目标。

这是实现这样的方式吗? 谢谢

1 个答案:

答案 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 } ),但第二个版本也应该使用命名字符向量。