R将变量更改为NA而不是指定的字符串

时间:2015-08-06 17:39:20

标签: r

由于某些原因,这段代码找到了“label”列不是==“Negative”的所有实例,而是用NA替换它们而不是“〜Negative”......我不知道为什么。 该表是dcsv4,其中列标记为tweets,标签为:

dcsv4$label[dcsv$label != "Negative"]<-"~Negative"

值是其他字符串,如“愤怒”,“正面”和“兴奋”......

1 个答案:

答案 0 :(得分:1)

你应该了解的第一件因素是它们很奇怪。你可以考虑他们的主要特征是

  1. 它们看起来像字符串
  2. 它们像整数一样存储
  3. 他们既不像

    那样

    x&lt; - sample(c(&#34; Angry&#34;,&#34; Positive&#34;,&#34; Excited&#34;,&#34; Negative&#34;),             25,替换= TRUE) x&lt; - factor(x)

  4. 当您尝试在下面进行分配时,您正在尝试用字符覆盖基础数值。 R并没有很好地解释它,所以它返回缺失值。

    x_attempt1 <- x
    (x_attempt1[x_attempt1 != "Negative"] <- "~Negative")
    

    一个因素有两个部分。级别是整数部分,它们总是从1到n,其中n是级别数。

    标签是我们看到的部分。

    如果您想修改因子标签的外观,您实际上必须访问levels属性

    levels(x)
    

    不要被那里的功能名称所欺骗。 levels将显示标签,但标签按级别的升序排序(因此第一个标签为1,第二个标签为2,等等)

    如果要更改标签的外观,可以执行以下操作:

    x_attempt2 <- x
    levels(x_attempt2) <- list("~Negative" = c("Angry", "Positive", "Excited"),
                               "Negative" = "Negative")
    x_attempt2
    

    或者,如果你想让生活变得更加舒适,可以将因子转换为角色向量,然后事情会像你期望的那样工作。

    x <- as.character(x)
    x[x != "Negative"] <- "~Negative"