我有以下形式的data.frame或矩阵:
列名称:X
,Y
,Freq
:
a, 1, 3
b, 4, 2
最后一列是一个重量变量。如何在没有重量的情况下将其转换为data.frame / matrix?
a, 1
a, 1
a, 1
b, 4
b, 4
答案 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