R:从具有权重变量的data.frame转到常规data.frame

时间:2011-08-05 16:55:37

标签: r dataframe

我有以下形式的data.frame或矩阵:

列名称:XYFreq

a, 1, 3
b, 4, 2

最后一列是一个重量变量。如何在没有重量的情况下将其转换为data.frame / matrix?

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

2 个答案:

答案 0 :(得分:3)

我认为您可以使用简单的子设置来完成此操作:

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

答案 1 :(得分:0)

以您的数据为例,我想到了几个选项:

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