A = c(1,2,3,2,1,2,2,2,1,2,3,2,1)
B = c(2,3,2,3,2,2,1,1,2,1,2,2,3)
mytable = table(A,B)
从中找到两个向量的最佳解决方案是什么mytable
?当然,它不会是完全相同的向量,但必须遵守A
比较的顺序。B
是否有意义?
您可以使用data.frame
和rep
:
X <- as.data.frame(mytable)
X[] <- lapply(X, function(z) type.convert(as.character(z)))
Y <- X[rep(rownames(X), X$Freq), 1:2]
Y
# A B
# 2 2 1
# 2.1 2 1
# 2.2 2 1
# 4 1 2
# 4.1 1 2
# 4.2 1 2
# 5 2 2
# 5.1 2 2
# 6 3 2
# 6.1 3 2
# 7 1 3
# 8 2 3
# 8.1 2 3
Y$A
包含与 相同的值A
,并且Y$B
包含与 相同的值B
。
all.equal(sort(Y$A), sort(A))
# [1] TRUE
all.equal(sort(Y$B), sort(B))
# [1] TRUE
或者,使用@Matthew 的评论:
X <- data.matrix(data.frame(mytable))
X[rep(sequence(nrow(X)), X[, "Freq"]), 1:2]
在这种情况下,结果是一个两列矩阵。
您也可以expandRows
在转换table
为data.table
. 请注意,它还会向您提供有关哪些组合具有零值的消息,因此在扩展为长形式时会被删除。
library(splitstackshape)
expandRows(as.data.table(mytable), "N")
# The following rows have been dropped from the input:
#
# 1, 3, 9
#
# A B
# 1: 2 1
# 2: 2 1
# 3: 2 1
# 4: 1 2
# 5: 1 2
# 6: 1 2
# 7: 2 2
# 8: 2 2
# 9: 3 2
# 10: 3 2
# 11: 1 3
# 12: 2 3
# 13: 2 3