2017-06-21 69 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"