2017-06-21 68 views
0

说我有两个向量。使用有条件地从其他向量生成的值生成矢量

a <- c(1,5) 
b <- c(2,3,4,6) 

我想创建从该两个矢量的矢量,使得在新向量位置“a”为红色和“b”是蓝色的,导致

c <- c('red','blue','blue','blue','red','blue') 

我认为可能是使用代表将有所帮助,但例如某种基于ab的代表中的ifelse?

回答

4

如何

cols <- rep(NA,length(a)+length(b)) 
cols[a] <- "red" 
cols[b] <- "blue" 

cols 
# [1] "red" "blue" "blue" "blue" "red" "blue" 
+0

辉煌!我正在努力想出这一个。谢谢。 – Ahdee

3

这里是stack一个选项。获取在listvector对象与mgetstack创建data.frametransform的“IND”列factorlabels为“红”,“蓝”,得到order后的“IND”荷兰国际集团的“价值”。

d1 <- transform(stack(mget(c('a', 'b'))), ind = factor(ind, labels = c('red', 'blue'))) 
as.character(d1$ind[order(d1$values)]) 
#[1] "red" "blue" "blue" "blue" "red" "blue" 

作为@Frank所述,用这种方法,2层以上的载体可sort编出

+2

值得注意的是:这是迄今为止发布的唯一途径,将完全扩展到更多的媒介(超出了两个,a和b)。 – Frank

0

也许更通用的解决方案相比@MattTyers整齐之一:

cols <- sort(c(a,b)) 
cols[cols %in% a] <- "red" 
cols[cols %in% b] <- "blue" 
cols 
# [1] "red" "blue" "blue" "blue" "red" "blue"