【问题标题】:Is there a way to keep all the object types of each column in a dataframe when converting the dataframe into a matrix?将数据框转换为矩阵时,有没有办法将每列的所有对象类型保留在数据框中?
【发布时间】:2019-06-09 21:26:31
【问题描述】:

我想将数据框转换为 R 中的矩阵。数据框有 30 多个不同类型的变量,其中一些是数字,一些是因子和一些字符。将其转换为矩阵时,我希望所有类型与数据框中的类型完全相同。

我尝试使用 as.matrix() 对其进行转换,请参见下面的代码(这只是一个简单的示例数据框,只有两个变量)。

test_df <- data.frame(a = c(1:10), b = c(letters[1:10]))
test_df <- as.matrix(test_df)
typeof(test_df[,1])
typeof(test_df[,2])

示例中的“a”列具有整数类型,而“b”列具有类型因子。我希望在将数据框转换为矩阵时,每一列都保持其类型。但是,当我将其转换为矩阵时,所有变量都被转换为字符类型。

【问题讨论】:

  • 我很想知道你为什么要追求这个?一个矩阵只能有一种类型的数据。是否有其他方法可以满足您的需求?
  • 因为我必须遍历数据帧,这需要很长时间,因为它有超过 400 万行。我注意到循环矩阵要快得多。我希望我可以将数据帧转换为矩阵,然后循环遍历它,然后再将其转换回数据帧。但从你的回答我明白这是不可能的。
  • 如果您显示您正在使用的代码的确切问题,那么有人可能会以更有效的方式帮助您

标签: r dataframe matrix


【解决方案1】:

不,你不能那样做。在 R 中,矩阵必须是一种类型:它被存储为该类型的向量以及表示它有多少行和列的属性。

为了提高效率,你说得对,矩阵比数据帧快得多。也许您可以将数据框拆分为一个数字和一个字符。大多数其他类型可以强制转换为这些类型而不会造成太大损失。

【讨论】:

  • 感谢您的建议,这解决了我的问题!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-07-15
  • 1970-01-01
  • 2021-10-14
  • 2020-09-13
  • 1970-01-01
  • 2020-01-27
  • 1970-01-01
相关资源
最近更新 更多