【问题标题】:Creating a factor: error using the cut() function创建因子:使用 cut() 函数时出错
【发布时间】:2018-02-17 19:12:33
【问题描述】:

我在尝试创建指示空气质量指数是否超过 50 超过 100 天的新变量时收到此 Error in mutate_impl(.data, dots) : Evaluation error: lengths of 'breaks' and 'labels' differ. 错误。基本上,我想创建一个“是”或“否”和标签。

我观看了关于 cut() 函数的 YouTube 视频。我尝试了几种不同的breaks参数变体。我觉得好像很接近,但我不明白这个错误。中断应该从最小值开始,正好在 100 结束。任何超过 100 到最大值的值都应该得到“是”

【问题讨论】:

  • mutate 中,您可以直接引用数据的列名。尝试简单地使用count 而不是.$count
  • 没什么区别:/.
  • 如果mutate_at如下图对您没有帮助,请提供一些示例数据。
  • 使用 dput(pmdata) 提供 dplyr 链中的部分或全部数据。

标签: r tidyverse


【解决方案1】:

您应该使用cut 函数使用mutate_at。示例数据示例如下。

计数已减少到4,以将样本数据中的标签视为“是”。实际实现时可以保持为100。

df <- read.table(text = "AQI Date.Local year Latitude Longitude City.Name State.Name 
 38 01-01 2005 30.5 -87.9 Fairhope Alabama 
 56 01-04 2005 30.5 -87.9 Fairhope Alabama 
 30 01-07 2005 30.5 -87.9 Fairhope Alabama 
 36 01-10 2005 30.5 -87.9 Fairhope Alabama 
 14 01-13 2005 30.5 -87.9 Fairhope Alabama 
 32 01-16 2005 30.5 -87.9 Fairhope Alabama
 60 01-16 2005 30.5 -97.9 NewCity Alabama
 70 01-16 2005 30.5 -97.9 NewCity Alabama
 80 01-16 2005 30.5 -97.9 NewCity Alabama
 70 01-16 2005 30.5 -97.9 NewCity Alabama
 55 01-16 2005 30.5 -97.9 NewCity Alabama
                 ", header = T, stringsAsFactors = F)

library(tidyverse)

df %>% 
  group_by(Latitude, Longitude, year) %>%
  filter(AQI > 50) %>%
  summarise(count = n()) %>%
  select(year, Latitude, Longitude, count) %>%
  mutate_at(vars(count), cut, 
            breaks = c(min(.), 4, max(.)), labels = c("No", "Yes"))  

#   year Latitude Longitude count 
#  <int>    <dbl>     <dbl> <fctr>
#1  2005     30.5     -97.9 Yes   
#2  2005     30.5     -87.9 No 

【讨论】:

  • 这不起作用..我基本上要绘制一些植物的位置(纬度和经度)......并通过显示平均 AQI 是否高于来改变点的颜色50 超过 100 天。我正在制作 2 个地块,分别是 2005 年和 2014 年。
  • @Josh 这不是预期的。如果您分享pmdata 的全部或部分内容,唯一可以查明问题的方法。
  • 我不确定我还能提供什么更多信息.. - AQI:空气质量指数,空气质量越小越好... - Date.Local:收集测量值的日期 -年份:2005 年或 2014 年 - 纬度:位置的纬度 - 经度:位置的经度 - City.Name - State.Name。
  • 有什么可以私信给你的吗?我觉得我的代码非常接近我需要它做的事情。我只使用 pmdata 集中的 7 个变量。它包含超过 500k 的观察结果。我不确定什么是不期望的?
  • @Josh 您可以简单地在命令行上运行head(pmdata) 并共享输出。我可以根据样本数据显示我的答案。如果这不起作用,您可以给我发消息。
猜你喜欢
  • 1970-01-01
  • 2019-06-20
  • 2020-12-14
  • 2021-12-13
  • 2021-07-13
  • 1970-01-01
  • 2018-05-11
  • 2021-07-12
  • 1970-01-01
相关资源
最近更新 更多