2013-10-07 1 views
0

у меня есть кадр данных, который выглядит следующим образом:Дублирование элементов из кадра данных

x <- as.data.frame(matrix(data = c("a", "b", "c", 1, 2, 3), 
         ncol = 2, 
         nrow = 3, 
         byrow = FALSE)) 

> x 
    V1 V2 
1 a 1 
2 b 2 
3 c 3 

Допустим, я хочу, чтобы дублировать элемент х [1,2] четыре раза, элемент х [2,2] шесть раз и элемент x [3,2] пять раз и сохранить их все в новом фрейме данных.

> v 
    V1 
    1 
    1 
    1 
    1 
    2 
    2 
    ... 

Я знаю, что я мог бы сделать это с помощью rep, но мне интересно, если есть более удобный способ.

+0

Это звучит, как вы могли бы иметь более общее требование, но способ формулирования вопроса в настоящее время. Я бы получил много Ответственные ответы –

ответ

0

Вот еще одна альтернатива

data.frame(v=rep(as.numeric(x[,2]), c(4,6,5))) 

Если вы хотите сохранить факторы, а затем опустить as.numeric(·)

data.frame(v=rep(x[,2], c(4,6,5))) 
0

вы могли бы использовать что-то вроде

TheseRows <- c(1, 2, 3) 
NManyReps <- c(4, 6, 5) 
x[, 2][ do.call(rep, list(TheseRows, NManyReps)) ] 
+0

Спасибо, это работает! Но почему вы используете 'x [, 2]'. Я только что попробовал 'do.call (rep, list (TheseRows, NManyReps))' и получил в основном тот же результат. В чем разница? –

+0

Попробуйте более сложную 'x' и посмотрите, почему –