将数据分组并将功能应用于分组数据

时间:2018-02-18 12:04:32

标签: r group-by count tidyverse lubridate

我正在尝试根据日期(一天内所有观察结果)对数据进行分组,并应用函数来计算否。分组数据中的观察结果。

我的代码是:

Library(ggplot2)
library(lubridate)
library(tidyverse)


cmsaf_data <- read.csv("tmy_era_25.796_45.547_2005_2014.csv",
             skip = 16, header = T)

data <- cmsaf_data %>%
  mutate(time = mdy_hm(Date_Time),
         date = date(time), months = month(date))


data <- subset(data,Global.horizontal.irradiance..W.m2.>0) # subsetting based upon values of GHI > 0

year(data$date) <- 2007

summarised <- data %>%
  group_by(date) %>% summarise(hours = nrow(data))

在此代码的最后一行,我正在尝试按日期分组数据并计算否。观察结果,即现在我的数据中的行,但结果是,而不是得到否。特定组的行,我没有。整个数据的行数。

以前我已经使用相同的代码并将sum函数应用于我的分组数据,它工作得很好!现在,当我尝试应用nrow()函数来计算否。行,这段代码不起作用。

我不确定我犯的是什么错误。如果有任何可以进行的更正或我可以遵循的方法,请指导我!

我的数据链接是: link

提前致谢!

1 个答案:

答案 0 :(得分:1)

以下是对数据框进行分组后nrow(data)n()之间的比较。要计算每个组中的行,我们应该使用n(),而nrow(data)返回数据框的整个行号。

data %>%
  group_by(date) %>% summarise(hours = nrow(data))
# # A tibble: 365 x 2
#    date       hours
#    <date>     <int>
#  1 2007-01-01  4272
#  2 2007-01-02  4272
#  3 2007-01-03  4272
#  4 2007-01-04  4272
#  5 2007-01-05  4272
#  6 2007-01-06  4272
#  7 2007-01-07  4272
#  8 2007-01-08  4272
#  9 2007-01-09  4272
# 10 2007-01-10  4272
# # ... with 355 more rows

data %>%
  group_by(date) %>% summarise(hours = n())
# # A tibble: 365 x 2
#   date       hours
#    <date>     <int>
#  1 2007-01-01    10
#  2 2007-01-02    10
#  3 2007-01-03    10
#  4 2007-01-04    10
#  5 2007-01-05    10
#  6 2007-01-06    10
#  7 2007-01-07    10
#  8 2007-01-08    10
#  9 2007-01-09    10
# 10 2007-01-10    10
# # ... with 355 more rows