我有一个矩阵。矩阵的条目是维度级别组合的计数。例如:
for item in data["Results"]:
print item["Name"]
我可以将其更改为长格式:
(m0 <- matrix(1:4, nrow=2, dimnames=list(c("A","B"),c("A","B"))))
A B
A 1 3
B 2 4
但我希望根据 value :
获得多重条目library("reshape")
(m1 <- melt(m0))
X1 X2 value
1 A A 1
2 B A 2
3 A B 3
4 B B 4
m2 <- m1
for (i in 1:nrow(m1)) {
j <- m1[i,"value"]
k <- 2
while ( k <= j) {
m2 <- rbind(m2,m1[i,])
k = k+1
}
}
> m2 <- subset(m2,select = - value)
> m2[order(m2$X1),]
X1 X2
1 A A
3 A B
31 A B
32 A B
2 B A
4 B B
21 B A
41 B B
42 B B
43 B B
中是否有参数考虑根据值乘以条目?或任何其他可以执行此问题的库?
答案 0 :(得分:3)
我们可以使用base R
执行此操作。我们转换了dimnames
的&#39; m0&#39;到一个&data; data.frame&#39;使用expand.grid
的两列,然后使用&#39; m0&#39;,order
中的值复制数据集的行,并将行名称更改为NULL
(如果必要)。
d1 <- expand.grid(dimnames(m0))
d2 <- d1[rep(1:nrow(d1), c(m0)),]
res <- d2[order(d2$Var1),]
row.names(res) <- NULL
res
# Var1 Var2
#1 A A
#2 A B
#3 A B
#4 A B
#5 B A
#6 B A
#7 B B
#8 B B
#9 B B
#10 B B
或者使用melt
,我们会转换&#39; m0&#39;长期&#39;格式化,然后像以前一样复制行。
library(reshape2)
dM <- melt(m0)
dM[rep(1:nrow(dM), dM$value),1:2]
正如@Frank所提到的,我们也可以table
使用as.data.frame
来创建&#39; dM&#39;
dM <- as.data.frame(as.table(m0))