Создайте кадр данных с переменным числом копий каждой строки в исходном кадре данных.

Скажи у меня есть датафрейм

source <- data.frame(ID=c(1,2), COUNT=c(3,4))

это выглядит так:

  ID COUNT
1  1     3
2  2     4  

Я хотел бы преобразовать это в фрейм данных, в котором есть записи COUNT для каждого идентификатора, с новым уникальным ITEMID, как этот

  ITEMID SOURCEID
1      1        1
2      2        1
3      3        1
4      4        2
5      5        2
6      6        2
7      7        2

Я могу сделать это с помощью цикла for, но я хочу узнать, как это сделать с помощью функций применения типа.

2 ответа

Решение

Нет необходимости apply функции:

orig <- data.frame(ID=1:2,COUNT=3:4)
new <- data.frame(ITEMID=seq(sum(orig$COUNT)), SOURCEID=rep(orig$ID,times=orig$COUNT))
new
  ITEMID SOURCEID
1      1        1
2      2        1
3      3        1
4      4        2
5      5        2
6      6        2
7      7        2

Как насчет:

do.call(rbind, lapply(split(source, source$ID), with, df, {
    itemid <- seq(count)
    sourceid <- id
    data.frame(itemid, sourceid)
})
Другие вопросы по тегам