假设我们有一个矩阵M
。
# n1 n2 n3 n4
# m1 1 4 7 10
# m2 2 5 8 11
# m3 3 6 9 12
为了将列列为"data.frames"
,我们可以这样做:
apply(M, 2, data.frame)
但是,列出的数据框具有怪异且相同的列名,例如:
# $n1
# newX...i.
# m1 1
# m2 2
# m3 3
与lapply
相同:
lapply(data.frame(M), data.frame)
# $n1
# X..i..
# 1 1
# 2 2
# 3 3
到目前为止,我发现获得预期输出的唯一方法是:
lapply(1:ncol(M), function(x) setNames(data.frame(M[,x]), colnames(M)[x]))
# [[1]]
# n1 ## <-- expected col names!
# m1 1
# m2 2
# m3 3
这出乎意料地麻烦。我可能错过了一个更简单的 base 函数吗?
M <- structure(1:12, .Dim = 3:4, .Dimnames = list(c("m1", "m2", "m3"
), c("n1", "n2", "n3", "n4")))
答案 0 :(得分:3)
一个选择可能是(我的原始帖子和@H 1的建议的综合):
split.default(data.frame(M), colnames(M))
它具有以下结构:
List of 4
$ n1:'data.frame': 3 obs. of 1 variable:
..$ n1: int [1:3] 1 2 3
$ n2:'data.frame': 3 obs. of 1 variable:
..$ n2: int [1:3] 4 5 6
$ n3:'data.frame': 3 obs. of 1 variable:
..$ n3: int [1:3] 7 8 9
$ n4:'data.frame': 3 obs. of 1 variable:
..$ n4: int [1:3] 10 11 12