如何在保留列名的同时将矩阵的列巧妙地列出到数据帧中?

问题描述 投票:1回答:1

说我们有一个矩阵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")))
r dataframe matrix
1个回答
2
投票

一个选项可能是(我的原始帖子和@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
© www.soinside.com 2019 - 2024. All rights reserved.