Создайте кадр данных с переменным числом копий каждой строки в исходном кадре данных.
Скажи у меня есть датафрейм
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)
})