【问题标题】:data.matrix() modifies first column of the data frame in Rdata.matrix() 修改 R 中数据框的第一列
【发布时间】:2018-07-13 09:14:24
【问题描述】:

我有一个像这样的数据框:

>df
         classA  classB  classC  classD
item1         0       0      34       6
item2         2      12     267      12
item3        45      26       3    5876
item4        23     110     674      17
item5         1      14      98      17
>class(df)
[1] "data.frame"
>typeof(df)
[1] "list"
>is.factor(df)
[1] FALSE

当我将其转换为数字矩阵(对其进行一些操作)时,第一列的值(仅)会发生变化。

>data.matrix(df)
          classA  classB  classC  classD
 item1         1       0      34       6
 item2         3      12     267      12
 item3        59      26       3    5876
 item4        34     110     674      17
 item5         2      14      98      17

我不明白。 这些数字从何而来? 如何正确将数据框转换为数值矩阵?

【问题讨论】:

  • 你好,你能给我们dput(df)的输出吗

标签: r


【解决方案1】:

你应该使用as.matrix:

> df
         ClassA ClassB ClassC ClassD
    1      0      0     34      6
    2      2     12    267     12
    3     45     26      3   5876
    4     23    110    674     17
    5      1     98     98     17
 > as.matrix(df)
       ClassA ClassB ClassC ClassD
[1,]      0      0     34      6
[2,]      2     12    267     12
[3,]     45     26      3   5876
[4,]     23    110    674     17
[5,]      1     98     98     17
> class(as.matrix(df))
[1] "matrix"

【讨论】:

  • 成功了,谢谢!但是,它将其转换为字符矩阵。需要输入df_mat <- as.matrix(df); class(df_mat) <- "numeric" 转换为数值矩阵。
【解决方案2】:

我猜df 的第一列是一个因素(您可以通过输入is.factor(df[,1]) 来检查)。 函数 data.matrix 返回因子的内部值。这就是为什么你得到不同的数字。

避免这种情况的一种方法是先将第一列转换为数字列,或者改用as.matrix

【讨论】:

  • 正确。第一列确实是一个因素。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-10-27
  • 2018-05-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多