经过广泛搜索这个问题,我仍然找不到解决方案 . 我有一个简单的数据框,有43行和2列 . 我的第一列包含两个日期 . 第一个日期打印19次,另外24次打印 . 第二列是温度 . 我希望按日期找到最高和最低温度,但我的代码会一直打印整个数据集的最大值和最小值 .
数据:
Date <- c(rep(x = "2017-05-18", each= 19), rep(x = "2017-05-19", each= 24))
Temperature_F <- c(35, 35, 42, 49, 57, 63, 64, 67, 70, 71, 72, 71, 72, 70, 66, 61, 57, 54, 50, 49, 45, 44, 44, 42, 40, 39, 47, 53, 61, 67, 69,
72, 75, 76, 77, 76, 77, 75, 71, 66, 62, 58, 54)
NWS_temps1 <- data.frame(Date, Temperature_F)
这是我的dplyr代码,当我认为应该按照日期给出最大和最小温度时,它会一直给我整个温度列的最大值和最小值 .
NWS_temps1 <- tbl_df(NWS_temps1)
NWS_temps1 %>%
group_by(Date) %>%
summarise(Tmax = max(Temperature_F), Tmin= min(Temperature_F))
我得到的输出是:
Tmax Tmin
77 35
当我希望:
Date Tmax Tmin
2017-05-18 72 35
2017-05-19 77 39
我不明白为什么Date没有被分组 . 我已经尝试将Date更改为一个因子,因为它在这里,字符,日期对象,甚至POSIXct,但我的结果始终是总数据帧max和min .
任何帮助深表感谢 .
谢谢 .
4 回答
看起来您使用的是标准评估版本
group_by_()
而不是NSE版本group_by()
. 尝试没有下划线:其他人使用
dplyr
提供的答案应该有效 . 但是,如果由于某些原因dplyr
无效 . 这是使用来自基地R的tapply
的解决方案 .在将表示为数字的日期/时间字段转换为带有
as.Date()
的日期时,我能够复制原始的group_by()
问题 - 这可能在使用从Excel文件导入的日期/时间字段时发生,因为Excel将日期存储为数字 .这为'2018-03-08'和'2018-03-23'提供了相同日期的多个版本 . '2018-03-08'的一行有两个观察结果,因为有两个'43167.59' - 相同的日期和时间,而另外两个43167,但都有不同的时间 . 这看起来可能是
dplyr
相关问题,因为table(as.Date(df$date, origin = '1899-12-30'))
按预期工作 .一种选择是使用
lubridate::ymd()
:另一个(原始)解决方案是将日期转换为字符,如果要将其保留为日期,则返回:
最佳解决方案可能是退回步骤并将列类型设置为使用
readxl::read_excel()
导入时的日期 . 这将导入该字段作为日期/时间,但是as.Date()
和group_by()
将按预期工作 . vignette中的示例: