从其他向量有条件地生成具有值的向量

时间:2017-06-21 18:27:12

标签: r

说我有两个向量。

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

我想从这两个向量创建一个向量,使得'a'中新向量中的位置为红色,'b'为蓝色,结果

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

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

3 个答案:

答案 0 :(得分:4)

怎么样

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

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

答案 1 :(得分:3)

以下是stack的选项。使用vector list获取mgetstack个对象,以data.frame创建transformfactor'ind'列到{{1} } labels为'red','blue',在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所说,使用这种方法,可以sort出两个以上的载体

答案 2 :(得分: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"