【问题标题】:How to cbind a discrete factor to a large matrix如何将离散因子绑定到大矩阵
【发布时间】:2014-10-21 13:42:52
【问题描述】:

我有一个离散因子,长度为 79。

[1] 4 6 6 4 6 1 6 4 1 6 1 4 6 1 1 1 6 6 6 6 6 4 1 6 6 4 6 6 1 1 6 4 6 1 6 6 4 4
[39] 6 6 4 1 1 4 1 1 6 1 1 6 6 1 1 6 4 1 1 6 1 6 6 1 6 6 6 6 1 1 1 1 6 1 1 1 1 1
[77] 6 6 1
Levels: 1 4 6

我正在尝试将此离散因子绑定到一个大矩阵,其尺寸为:79 行 x 1921 列。有人告诉我,我的最终结果应该是添加了列的原始矩阵,但我不确定我应该如何解决这个问题。提前致谢。

这是我得到的用于将因子 cbind 到矩阵的代码:

dd1 = mat.x
for(v in levels(X)){
    nv = rep(0, length(X))
    nv[X==v] = 1
    dd1 = cbind(dd1, nv)
}

我收到此警告消息:

警告信息:

1: 在 cbind(dd1, nv) 中:

结果的行数不是向量长度的倍数(arg 2)

2: 在 cbind(dd1, nv) 中:

结果的行数不是向量长度的倍数(arg 2)

3: 在 cbind(dd1, nv) 中:

结果的行数不是向量长度的倍数(arg 2)

【问题讨论】:

  • 不能使用矩阵。也许是一个数据框?矩阵列必须全部相同class
  • 您是否真的尝试过cbind?我不明白为什么mat <- cbind(mat, vec) 不起作用(其中mat 是您的矩阵,vec 是您的因子向量)
  • 可以,但已分解的向量将不再被分解
  • 嗨,我编辑了我的原始帖子以包含我运行的警告消息和代码。
  • 你确认length(X)==nrow(mat.x)了吗?

标签: r matrix cbind


【解决方案1】:

我认为你的问题只是一个错字。使用样本数据

mat.x <- matrix(1, nrow=17, ncol=4)
X <- factor(sample(c(4,6,10), 17, replace=T))

此代码有效

dd1 = mat.x
for(v in levels(X)){
    nv = rep(0, length(X))
    nv[X==v] = 1
    dd1 = cbind(dd1, nv)
}

请注意,我必须将 nv[y==v] = 1 更改为 nv[X==v] = 1,因为您没有在问题的任何地方定义 y

【讨论】:

  • 使用cbind(mat.x,model.matrix(~X-1))不是更好/更高效吗?
  • 当然。我想我只是想弄清楚为什么代码不起作用。
  • 天哪,你是对的!我现在在踢自己。谢谢。
【解决方案2】:

matrix 中的所有元素必须是同一个类。改用 data.frame 或 data.table

 data.frame(vec, mat)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-06
    • 1970-01-01
    • 2018-09-15
    • 2023-03-15
    • 1970-01-01
    • 2018-09-10
    • 2011-09-17
    • 2011-05-31
    相关资源
    最近更新 更多