【问题标题】:NAs introduced by coercion when labeling breaks in cut function在剪切函数中标记中断时强制引入的 NA
【发布时间】:2014-05-08 04:11:08
【问题描述】:

在使用剪切功能时,我在标记中断(或间隔)时遇到问题。

以下是一些示例数据(实际数据集在一个数据框中有超过 22,000 个条目,范围从 1899 年到 2014 年,共有 12 个向量):

x <- c(1899,1900,2001,2012,1999,1943,1944,1950,1988,1981,1988,1997,2014)

我想按十年对这些进行分类(例如,1890 年代包括 1890 到 1899)。我可以使用以下代码进行休息:

decade_vector <- cut(x, breaks = c(1889,1899,1909,1919,1929,1939,1949,
                                   1959,1969,1979,1989,1999,2009,2019))

但是,当我使用以下代码标记这些中断时:

decade_vector <- cut(x, breaks = c(1889,1899,1909,1919,1929,1939,1949,
                                   1959,1969,1979,1989,1999,2009,2019), 
                     labels = c("1890s","1900s","1910s","1920s","1930s",
                                "1940s","1950s","1960s","1970s","1980s",
                                "1990s","2000s","2010s"), 
                     ordered=TRUE))

我明白了:

Warning message:
In is.factor(x) : NAs introduced by coercion

我创建了一个数据框并将其写入 csv,当我查看它时,我看不到任何 NA,但标签不存在。

有人可以告诉我我做错了什么吗?我想按十年获得各种统计数据,但我似乎无法弄清楚我在这里缺少什么。

任何帮助将不胜感激!

谢谢!

【问题讨论】:

  • 这对我有用。 (在最后一个示例中,您有一个额外的右括号,但除此之外,我会得到我认为您想要的结果。)
  • 您似乎在第二个 cut 语句的末尾多了一个“)”。取出后,它对我有用。

标签: r label cut na


【解决方案1】:

正如其他人已经在 cmets 中所述,您的“强制引入的 NA”是不可重现的。但是让我给你一个提示,告诉你如何使代码更“可扩展”和可读性:

x <- c(1890, 1899,1900,2001,2012,1999,1943,1944,1950,1988,1981,1988,1997,2014)
brk <- seq(1890, 2020, by=10) # breaks
cut(x, breaks=brk, right=FALSE, labels=paste(brk[-length(brk)], "s", sep=""), ordered=TRUE)
## [1] 1890s 1890s 1900s 2000s 2010s 1990s 1940s 1940s 1950s 1980s 1980s 1980s 1990s 2010s
## Levels: 1890s < 1900s < 1910s < 1920s < 1930s < 1940s < 1950s < 1960s < 1970s < 1980s < 1990s < 2000s < 2010s

【讨论】:

  • 谢谢,太好了!我不知道为什么,但原始代码仍然给了我“强制引入的 NA”(甚至减去额外的“)”),但你的提示非常有效:)
猜你喜欢
  • 2019-04-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多