【问题标题】:Transpose a vector into a single column? [duplicate]将向量转置为单列? [复制]
【发布时间】:2019-01-15 12:38:04
【问题描述】:

不敢相信我以前从未在 R 中注意到这一点!

如果我转置一个向量,它不会像我期望的那样给出一个单列矩阵。

示例

test <- c(1, 2, 3, 4)

t(test)

[,1] [,2] [,3] [,4]
[1,] 1 2 3 4

这在我的一个函数中造成了问题。

有什么解决方法吗?

【问题讨论】:

  • 另外,阅读drop = FALSE。也许您在子集时会丢失函数中矩阵的维度,例如:mymat &lt;- data[ , 1],这样我们会丢弃暗淡,而是尝试使用mymat &lt;- data[ , 1, drop = FALSE]。那么也许就不需要转置任何东西了。

标签: r


【解决方案1】:

我们使用matrix 进行包装,默认情况下它提供一列

matrix(test)
#     [,1]
#[1,]    1
#[2,]    2
#[3,]    3
#[4,]    4

正如?matrix 的文档所说

如果没有给出 nrow 或 ncol 之一,则尝试从数据长度和其他参数推断它。如果两者都没有给出,则返回一个单列矩阵。


另外,matrix 是带有dim 属性的vector,因此,另一种选择是分配dim 属性

dim(test) <- c(length(test), 1)

transpose 这样做的原因是根据?t

当 x 是向量时,它被视为一列,即结果是一个 1 行矩阵。

【讨论】:

  • 太好了!我应该澄清一下我的问题:如果我不知道test 是单行向量还是多行矩阵,你会使用什么方法?有什么方法可以同时翻转吗?我总是可以测试它是否是单行向量,但可能有更好的解决方案......
  • @francoiskroll。您可以使用if/elseis.vector
  • 好吧,那没有通用的方法。非常感谢!
  • @francoiskroll。或者,转换为向量并仅应用单个函数,即as.vector(objectName)。在这种情况下,您可以确定它始终是 vector
  • 您可能需要在答案中添加t(t(test)) 以全面了解不同的选项(来自stackoverflow.com/questions/51201856/…)。奇怪的符号,但它的工作...
猜你喜欢
  • 1970-01-01
  • 2019-05-19
  • 1970-01-01
  • 2014-06-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多