将r数据帧转换为正确的格式以使用rep

时间:2016-09-09 03:54:05

标签: r dataframe rep

我有一个表格

的数据框
A = data.frame(c(1485,1486,1701,1808))
names(A) <- c("ID")

和表格的第二个数据框

B = data.frame(1:12)
names(B) <- "value"

我希望能够在rep中使用它来形成B中的第二列,以便我有

B$new <- rep(A,each = 3, length.out = 12)

> B
   value  new
1      1 1485
2      2 1485
3      3 1485
4      4 1486
5      5 1486
6      6 1486
7      7 1701
8      8 1701
9      9 1701
10    10 1808
11    11 1808
12    12 1808

如果我定义A = c(1485,1486,1701,1808),这可以正常工作,但因为A不是数据帧。如何将A转换为与rep一起使用的正确形式?我试过as.list,as.vector,as.integer失败了。

2 个答案:

答案 0 :(得分:3)

由于A是一个数据框,您需要指定要重复的列。 (这里ID

B$new <- rep(A$ID,each = 3, length.out = 12)
B

#   value  new
#1      1 1485
#2      2 1485
#3      3 1485
#4      4 1486
#5      5 1486
#6      6 1486
#7      7 1701
#8      8 1701
#9      9 1701
#10    10 1808
#11    11 1808
#12    12 1808

在您的情况下,这也可以在不使用length.out参数

的情况下工作
rep(A$ID,each = 3)

它将在ID中重复每次A 3次,给出相同的结果。

答案 1 :(得分:1)

If A is a data frame you can use rep function in this way

A = data.frame(c(1485,1486,1701,1808))
names(A) <- c("ID")

B = data.frame(1:12)
names(B) <- "value"


B$new <- sort(unlist(rep(A,times=3)))

print(B)
  value  new
1      1 1485
2      2 1485
3      3 1485
4      4 1486
5      5 1486
6      6 1486
7      7 1701
8      8 1701
9      9 1701
10    10 1808
11    11 1808
12    12 1808