【问题标题】:Creating a matrix with vectors, when there are factors involved当涉及因素时,使用向量创建矩阵
【发布时间】:2011-08-24 18:31:09
【问题描述】:

我几乎到了互联网的尽头,但我找不到我的问题的(确切)答案!

这可能很容易,但我只想从数据框中选择一些变量,以形成一个包含一些向量的矩阵。所以主要发生在下面的示例中:

treatment <- factor(rep(c(1, 2), c(43, 41)), levels = c(1, 2),
    labels = c("placebo", "treated"))

improved <- factor(rep(c(1, 2, 3, 1, 2, 3), c(29, 7, 7, 13, 7, 21)),
    levels = c(1, 2, 3),
    labels = c("none", "some", "marked"))

numberofdrugs<-rpois(84, 2)

X<-cbind(numberofdrugs, treatment, improved)

X #"why are the units numbers and not names

我遇到的问题是,R 正在将因子转换为数字。例如“男性”和“女性”为“0”和“1”。但我不想那样!我应该做些什么?

【问题讨论】:

  • 如果你到达互联网的尽头,你会意识到答案是 42。
  • @user734124,如果将cbind 应用于向量,它会尝试生成一个矩阵。矩阵列只能是同一类型。对于混合类型的列,您需要按照@Andrie 的建议使用data.frame
  • @mpiktas:这不仅是矩阵元素需要具有相同的类型,而且它们没有属性的要求还有一个进一步的限制。因子将它们的水平存储在属性中,当放入矩阵时这些会被清除。

标签: r matrix statistics


【解决方案1】:

这是cbind 的记录行为。来自?cbind“输入可能具有的任何类都被丢弃(特别是,因子被它们的内部代码替换。)”

您应该改用data.frame

X <- data.frame(numberofdrugs, treatment, improved)
head(X)

  numberofdrugs treatment improved
1             0   placebo     none
2             1   placebo     none
3             0   placebo     none
4             5   placebo     none
5             1   placebo     none
6             4   placebo     none

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-04
    • 1970-01-01
    • 2016-01-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多