【问题标题】:Issue with generating factors in RR中的生成因子问题
【发布时间】:2017-08-02 18:03:42
【问题描述】:

在使用 melt() 函数从宽格式转换为长格式后,我正在尝试将分类变量转换为 R 中的一个因子。但是,当我运行因子函数并输入级别和标签时,我得到一个表格:

有人知道为什么会这样吗?

law <- read.csv("lawyers_class_new.csv")


library(reshape2)
law <- melt(law, id.vars = c("Subj"), measure.vars = c("lawyer", "neutral", "engineer", "neutral_urb", "neutral_rur"))
law <- law[order(law$Subj),]
law <- within(law,
              Subj <- factor(Subj),
              variable <- factor(variable)
              )
law$variable<- ordered(law$variable,levels=c(1,2,3,4,5),labels=c("lawyer","neutral",
    "engineer","neutral_urb","neutral_rur"))


Output: 

law$variable
  [1] <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA>     <NA> <NA> <NA> <NA>
 [18] <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA>
 [35] <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA>
 [52] <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA>
 [69] <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA>
 [86] <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA>
[103] <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA>
[120] <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA>
[137] <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA>

融合数据框架:

**Subj  Cond    variable    value**
1         2       lawyer      3
1         3      neutral      1
1         1      engineer     3.5
1         5      neutral_urb  3
1         4      neutral_rur  3.5
2         2      lawyer       1
2         3      neutral      3.5
2         1      engineer     4.5
2         5      neutral_urb  2
2         4      neutral_rur  3.5

原始数据框:

Subj    lawyer  neutral engineer    neutral_urb neutral_rur
1          3       1      3.5           3          3.5
2          1     3.5      4.5           2          3.5

【问题讨论】:

  • 请做一个可重现的例子。我们无权访问lawers_class_new.csv。 stackoverflow.com/questions/5963269/…
  • 在第二次转换为有序因子时,水平似乎不是1:5。级别参数应该是因子级别的显示方式,并且标签只有在您想将它们更改为其他内容时才是可选的。
  • 另外,我不知道你的目标,但许多人错误地认为有序因子对于按特定顺序设置级别是必要的,例如,用于绘图。事实并非如此。 ordered 因素的唯一原因是建模时使用的对比。
  • @P Lapointe:抱歉,我不知道该怎么做?我无权访问服务器来发布数据集。
  • @Gregor:我正在尝试将级别转换为数值。我不想要非数字值。在我弄清楚这一点之后,我将对这些数据做一个线性混合模型,这需要我有对比。当我尝试按原样对“变量”进行对比时,我收到一条错误消息。所以我的想法是需要将“变量”转换为数字因子才能进行分析。这是一个不正确的假设吗?

标签: r statistics statsmodels


【解决方案1】:

为了最大程度地减少错误,我不会将字符列作为因子导入,而且似乎使用within 不会为 law$variable 正确创建因子。因此,我会指定这样的因素以确保正确的顺序。

law  <- read.table(text="Subj  Cond    variable    value
1         2       lawyer      3
1         3      neutral      1
1         1      engineer     3.5
1         5      neutral_urb  3
1         4      neutral_rur  3.5
2         2      lawyer       1
2         3      neutral      3.5
2         1      engineer     4.5
2         5      neutral_urb  2
2         4      neutral_rur  3.5", header=TRUE, stringsAsFactors=FALSE)

law <- law[order(law$Subj),]

law$Subj <- as.factor(law$Subj)
law$variable <- factor(law$variable,levels =c("lawyer","neutral",
    "engineer","neutral_urb","neutral_rur"))

str(law)
'data.frame':   10 obs. of  4 variables:
 $ Subj    : Factor w/ 2 levels "1","2": 1 1 1 1 1 2 2 2 2 2
 $ Cond    : int  2 3 1 5 4 2 3 1 5 4
 $ variable: Factor w/ 5 levels "lawyer","neutral",..: 1 2 3 4 5 1 2 3 4 5
 $ value   : num  3 1 3.5 3 3.5 1 3.5 4.5 2 3.5

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-07
    • 2015-10-15
    • 1970-01-01
    • 2016-03-02
    • 1970-01-01
    • 2019-04-04
    相关资源
    最近更新 更多