R: Переход от data.frame с переменной веса к обычному data.frame - PullRequest
1 голос
/ 05 августа 2011

У меня есть data.frame или матрица в следующей форме:

Название столбцов: X, Y, Freq:

a, 1, 3
b, 4, 2

Последний столбец является переменной веса. Как я могу преобразовать это в data.frame / матрицу без веса?

a, 1
a, 1
a, 1
b, 4
b, 4

Ответы [ 2 ]

3 голосов
/ 05 августа 2011

Я думаю, что вы можете сделать это с помощью простого подсчета:

dat <- data.frame(x=c('a','b'),y=c(1,4),wt = c(3,2))
dat[rep(1:nrow(dat),times = dat$wt),1:2]

, который производит это:

    x y
1   a 1
1.1 a 1
1.2 a 1
2   b 4
2.1 b 4
0 голосов
/ 05 августа 2011

Несколько вариантов приходят на ум, используя ваши данные в качестве примера:

dat <- data.frame(X = c("a", "b"), Y = c(1,4), Freq = c(3,2), 
                  stringsAsFactors = FALSE)

Первый вариант:

do.call(cbind.data.frame, lapply(dat[,-3], rep, times = dat[,3]))

А вторая маленькая функция:

foo <- function(dat) {
    data.frame(X = rep(dat$X, times = dat$Freq),
               Y = rep(dat$Y, times = dat$Freq))
}
foo(dat)

А еще есть:

> with(dat, dat[, 1:2][rep(seq_along(Freq), times = Freq),])
    X Y
1   a 1
1.1 a 1
1.2 a 1
2   b 4
2.1 b 4
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...