假设我们有一个矩阵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
事实证明这出乎意料地麻烦。我是否错过了一个更简单的基本功能?
数据
M <- structure(1:12, .Dim = 3:4, .Dimnames = list(c("m1", "m2", "m3"
), c("n1", "n2", "n3", "n4")))
最佳答案
一个选项可能是(我的原始帖子和 @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
关于r - 如何巧妙地将矩阵的列列出到数据框中,同时保留列名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58570031/