【问题标题】:Losing data while renaming column's content in data frame in R在R中的数据框中重命名列的内容时丢失数据
【发布时间】:2018-03-21 18:04:43
【问题描述】:

我想使用以下命令重命名我的数据框total 中的PitchAccent 列中的一些行:

total$PitchAccent <- sub("!H*","H*", total$PitchAccent)

所以!H* 现在变成了H*

但是,当我之后检查H* 的数量时,它与之前保持一致,!H*occurrences 似乎消失了。 此外,现在当我这样做时:

summary(total$PitchAccent)

它没有显示:

> summary(total$PitchAccent)
  !H*  !H*L    *?   ..H   ..L    H%    H*   H*?   H*L  H*L?  HH*L    L%    L* 
  262  2125     0    25   633     0  2056     0  6122     0     6     0   460 
  L*?   L*H  L*H?  L*HL    no !H*L?  LH*L     L    !H    H!    .L  L*!H L*HL? 
    0  7818     0    53 69569     0     2     1     0     0     1     1     0 

,但只是:

> summary(total$PitchAccent)
   Length     Class      Mode 
    89134 character character

【问题讨论】:

    标签: r


    【解决方案1】:

    摘要更改的原因是 sub() 将输入强制转换为字符。所以total$PitchAccent 不再是不同层次的因素,而是性格。所以摘要没有提供任何有用的信息。用 total$PitchAccent = as.factor(total$PitchAccent)

    【讨论】:

    • 谨慎使用factor。如果强制之前的水平有任何理智的命令,现在它已经消失了。 某种解决此问题的方法是存储旧级别 (lev &lt;- total$PitchAccent),将它们提供给您对新变量 (total$PitchAccent &lt;- factor(total$PitchAccent, levels=lev)) 上的 factor 的调用,然后使用 droplevels 来摆脱那些被你拒绝的人 (total$PitchAccent &lt;- droplevels(total$PitchAccent))。
    【解决方案2】:

    具体将因子的级别从!H*更改为H*

    total$PitchAccent <- factor(total$PitchAccent)
    levels(total$PitchAccent)[ levels(total$PitchAccent) == "!H*" ] <- "H*"
    

    然后,如果您想将其恢复为字符格式,请按以下方式进行转换。

    total$PitchAccent <- as.character(total$PitchAccent)
    

    使用gsubsub,您可以做到这一点

    gsub("!H*", "H*", total$PitchAccent, fixed = TRUE )
    sub("!H*", "H*", total$PitchAccent, fixed = TRUE )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-08
      • 2021-10-08
      • 1970-01-01
      • 2018-12-21
      • 2019-09-05
      • 1970-01-01
      • 1970-01-01
      • 2011-07-11
      相关资源
      最近更新 更多