如何在复制的数据帧上映射数组

时间:2017-11-10 20:51:38

标签: r dataframe

我正在尝试在test_replica上映射一个向量...

test <- data.frame(a = LETTERS[1:2], b = letters[1:2])
test_replica <- do.call("rbind", replicate(3, test, simplify = F))
vector_to_map <- c("10:10", "10:11", "10:12")

以获得以下结果:

  vector_to_map a b
1         10:10 A a
2         10:10 B b
3         10:11 A a
4         10:11 B b
5         10:12 A a
6         10:12 B b

2 个答案:

答案 0 :(得分:1)

跟进我的评论你可以做到:

test_replica$vector_to_map <- rep(vector_to_map, each = 2)

#  a b vector_to_map
#1 A a         10:10
#2 B b         10:10
#3 A a         10:11
#4 B b         10:11
#5 A a         10:12
#6 B b         10:12

或者更常见的是,如果vector_to_map的长度是test_replica中您可以执行的行的倍数,则可以执行以下操作:

test_replica$vector_to_map <- rep(vector_to_map, each = nrow(test_replica) / length(vector_to_map))

答案 1 :(得分:0)

我会为“vector to map”创建一个列向量,并将其绑定到data.frame。与将它们组合在一起相比,性能优势明显:

test <- data.frame(a = LETTERS[1:2], b = letters[1:2])
test_replica <- do.call("rbind", replicate(3, test, simplify = F))

x1 <- c(10,10,10)
x2 <- c(10,11,12)

vector_to_map <- paste(rep(x1, each=2), rep(x2, each = 2), sep = ":")

(test_replica <- cbind(vector_to_map, test_replica))

##   vector_to_map a b
## 1         10:10 A a
## 2         10:10 B b
## 3         10:11 A a
## 4         10:11 B b
## 5         10:12 A a
## 6         10:12 B b