使用aggregate(),我可以得到这样的data.frame:
V1 V2 V3
1 1 2 1
2 1 3 2, 3
3 1 4 4
4 1 5 5, 6
5 1 6 7
对于V3
,它是向量列表。
> b1$V3
$`0`
[1] 1
$`1`
[1] 2 3
$`2`
[1] 4
$`3`
[1] 5 6
$`4`
[1] 7
这令我感到惊讶,因为我认为data.frame只有两个维度。我甚至可以将它转换为伪三维矩阵(虽然它不是真正的三维)。
> as.matrix(b1)
V1 V2 V3
[1,] 1 2 1
[2,] 1 3 Numeric,2
[3,] 1 4 4
[4,] 1 5 Numeric,2
[5,] 1 6 7
但是,我无法以常规方式创建此类数据结构,例如向data.frame / matrix添加列表。由于这种结构很有用,我想知道它是如何创建的。有什么想法吗?
答案 0 :(得分:2)
这种结构可以使用I
函数进行。
mydf <- data.frame(
a = 1:3,
b = I(list(1, 3:5, 6:10))
)
str(mydf)
# 'data.frame': 3 obs. of 2 variables:
# $ a: int 1 2 3
# $ b:List of 3
# ..$ : num 1
# ..$ : int 3 4 5
# ..$ : int 6 7 8 9 10
# ..- attr(*, "class")= chr "AsIs"
as.matrix(mydf)
# a b
# [1,] 1 1
# [2,] 2 Integer,3
# [3,] 3 Integer,5
您也可以通过手动添加列来执行此操作:
mydf2 <- data.frame(a = 1:3)
mydf2$b <- list(1, 3:5, 6:10)
str(mydf2)
as.matrix(mydf2)