r - 如何巧妙地将矩阵的列列出到数据框中,同时保留列名称?

标签 r dataframe matrix

假设我们有一个矩阵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/

相关文章:

matlab - 将单元格划分为单列矩阵

r - 指定应用 read_csv 的列数

python - 如何将 PySpark RDD 转换为具有未知列的 Dataframe?

c++ - 如何在 C++ 中计算列随机矩阵的特征向量

python - 连接/合并数据帧并保留行顺序

python - Pandas .DataFrame : Filter rows of df A based on data in df B?

r - 检查矩阵元素的长度

r - 如何在交互式 session 中读取 knitr/Rmd 缓存?

使用 doSMP 生成随机数

r - 带有 ifelse 和两个对象的自定义函数需要以动态方式从正确的列中读取 R