R:数据帧中两列数据每小时平均15分钟的数据

R:数据帧中两列数据每小时平均15分钟的数据,r,R,我的数据如下所示(为了简单起见,我删除了其他几列。) 我想通过id获得每小时的平均温度和湿度。我想要得到的结果是:(为了简单起见,我想删除每个记录中的其他数据列。) 更新 Index Date Time Humid Temp serialnum id farm location 93 4/3/16 12:00:00 AM 63.8 46.7 1310014696 RSOSW_16 River School Outside

我的数据如下所示(为了简单起见,我删除了其他几列。)

我想通过id获得每小时的平均温度和湿度。我想要得到的结果是:(为了简单起见,我想删除每个记录中的其他数据列。)

更新

  Index   Date        Time Humid Temp  serialnum       id         farm location
     93 4/3/16 12:00:00 AM  63.8 46.7 1310014696 RSOSW_16 River School  Outside
     94 4/3/16 12:15:00 AM  60.3 47.8 1310014696 RSOSW_16 River School  Outside
     95 4/3/16 12:30:00 AM  64.4 46.2 1310014696 RSOSW_16 River School  Outside
     96 4/3/16 12:45:00 AM  60.4 46.8 1310014696 RSOSW_16 River School  Outside
     97 4/3/16  1:00:00 AM  61.3 46.6 1310014696 RSOSW_16 River School  Outside
     98 4/3/16  1:15:00 AM  68.5 44.3 1310014696 RSOSW_16 River School  Outside
serialnum、id、farm和location都是字符

提前谢谢

library(lubridate)
df[,2] <- mdy_hms(df[,2])

df %>% mutate(hour = hour(df[,2])) %>% 
  group_by(id, hour) %>% summarise_at(vars(Humid, Temp), mean)
这将导致

Source: local data frame [6 x 6]
Groups: id, hour [2]

Index            datetime  Humid   Temp     id  hour
<int>              <time>  <dbl>  <dbl> <fctr> <int>
  1    93 2016-04-03 00:00:00 62.225 46.875  RSOSW     0
2    94 2016-04-03 00:15:00 62.225 46.875  RSOSW     0
3    95 2016-04-03 00:30:00 62.225 46.875  RSOSW     0
4    96 2016-04-03 00:45:00 62.225 46.875  RSOSW     0
5    97 2016-04-03 01:00:00 68.850 44.025  RSOSW     1
6    98 2016-04-03 01:15:00 68.850 44.025  RSOSW     1
来源:本地数据帧[6 x 6]
组:id,小时[2]
索引日期时间湿度温度id小时
193 2016-04-03 00:00:00 62.225 46.875 RSOSW 0
294 2016-04-03 00:15:00 62.225 46.875 RSOSW 0
395 2016-04-03 00:30:00 62.225 46.875 RSOSW 0
496 2016-04-03 00:45:00 62.225 46.875 RSOSW 0
597 2016-04-03 01:00:00 68.850 44.025 RSOSW 1
6 98 2016-04-03 01:15:00 68.850 44.025 RSOSW 1
清理数据(请下次发布dput)
df
这将导致

Source: local data frame [6 x 6]
Groups: id, hour [2]

Index            datetime  Humid   Temp     id  hour
<int>              <time>  <dbl>  <dbl> <fctr> <int>
  1    93 2016-04-03 00:00:00 62.225 46.875  RSOSW     0
2    94 2016-04-03 00:15:00 62.225 46.875  RSOSW     0
3    95 2016-04-03 00:30:00 62.225 46.875  RSOSW     0
4    96 2016-04-03 00:45:00 62.225 46.875  RSOSW     0
5    97 2016-04-03 01:00:00 68.850 44.025  RSOSW     1
6    98 2016-04-03 01:15:00 68.850 44.025  RSOSW     1
来源:本地数据帧[6 x 6]
组:id,小时[2]
索引日期时间湿度温度id小时
193 2016-04-03 00:00:00 62.225 46.875 RSOSW 0
294 2016-04-03 00:15:00 62.225 46.875 RSOSW 0
395 2016-04-03 00:30:00 62.225 46.875 RSOSW 0
496 2016-04-03 00:45:00 62.225 46.875 RSOSW 0
597 2016-04-03 01:00:00 68.850 44.025 RSOSW 1
6 98 2016-04-03 01:15:00 68.850 44.025 RSOSW 1
清理数据(请下次发布dput)
df感谢您关于发布我的数据的建议。下次我会这么做的。是否有方法应用代码并将其余列保留在数据框中?在我发布的列之后,我有几个列希望保留在每条记录中。您可以使用
mutate
将列添加到数据帧的末尾,例如,我们添加了小时列。如果要用摘要替换多个列中的值,可以编辑
mutate_at
以反映您的最新问题。@phaser在减少行数(每小时1行而不是每15分钟1行)时,不会仅仅假设要保留的其他列都是相同的。如果您想保留
foo
列,您有两个选择:(a)将
foo
添加到分组中-在这种情况下,如果在一个
id
hour
内有多个
foo
值,您将得到
foo
每个值的一行,或者……因此,最简单的解决方案可能是选项(a)在我的第一条评论中-只需将其他列添加到
组中即可。感谢您对发布我的数据的建议。下次我会这么做的。是否有方法应用代码并将其余列保留在数据框中?在我发布的列之后,我有几个列希望保留在每条记录中。您可以使用
mutate
将列添加到数据帧的末尾,例如,我们添加了小时列。如果要用摘要替换多个列中的值,可以编辑
mutate_at
以反映您的最新问题。@phaser在减少行数(每小时1行而不是每15分钟1行)时,不会仅仅假设要保留的其他列都是相同的。如果您想保留
foo
列,您有两个选择:(a)将
foo
添加到分组中-在这种情况下,如果在一个
id
hour
内有多个
foo
值,您将得到
foo
每个值的一行,或者……因此,最简单的解决方案可能是选项(a)在我的第一条评论中,只需将其他列添加到
组中即可。
Source: local data frame [6 x 4]
Groups: id [?]

      id  hour  Humid   Temp
  <fctr> <int>  <dbl>  <dbl>
1  RSOSE     0 63.000 46.075
2  RSOSE     1 69.825 44.450
3  RSOSE     2 72.375 43.575
4  RSOSW     0 62.225 46.875
5  RSOSW     1 68.850 44.025
6  RSOSW     2 73.100 41.200
df %>% mutate(hour = hour(df[,2])) %>% 
  group_by(id, hour) %>% mutate_at(vars(Humid, Temp), mean) %>% head
Source: local data frame [6 x 6]
Groups: id, hour [2]

Index            datetime  Humid   Temp     id  hour
<int>              <time>  <dbl>  <dbl> <fctr> <int>
  1    93 2016-04-03 00:00:00 62.225 46.875  RSOSW     0
2    94 2016-04-03 00:15:00 62.225 46.875  RSOSW     0
3    95 2016-04-03 00:30:00 62.225 46.875  RSOSW     0
4    96 2016-04-03 00:45:00 62.225 46.875  RSOSW     0
5    97 2016-04-03 01:00:00 68.850 44.025  RSOSW     1
6    98 2016-04-03 01:15:00 68.850 44.025  RSOSW     1
df <- read.table(text =
                 "93 4/3/16 12:00:00 AM  63.8 46.7 RSOSW
                 94 4/3/16 12:15:00 AM  60.3 47.8 RSOSW
                 95 4/3/16 12:30:00 AM  64.4 46.2 RSOSW
                 96 4/3/16 12:45:00 AM  60.4 46.8 RSOSW
                 97 4/3/16  1:00:00 AM  61.3 46.6 RSOSW
                 98 4/3/16  1:15:00 AM  68.5 44.3 RSOSW
                 99 4/3/16  1:30:00 AM  70.5 43.4 RSOSW
                 100 4/3/16  1:45:00 AM  75.1 41.8 RSOSW
                 101 4/3/16  2:00:00 AM  74.9 41.3 RSOSW
                 102 4/3/16  2:15:00 AM  73.6 41.1 RSOSW
                 103 4/3/16  2:30:00 AM  72.8 41.2 RSOSW
                 104 4/3/16  2:45:00 AM  71.1 41.2 RSOSW
                 93 4/3/16 12:00:00 AM  64.9 47.8 RSOSE
                 94 4/3/16 12:15:00 AM  61.2 48.9 RSOSE
                 95 4/3/16 12:30:00 AM  63.3 45.3 RSOSE
                 96 4/3/16 12:45:00 AM  62.6 42.3 RSOSE
                 97 4/3/16  1:00:00 AM  60.9 49.9 RSOSE
                 98 4/3/16  1:15:00 AM  67.3 45.3 RSOSE
                 99 4/3/16  1:30:00 AM  72.1 42.1 RSOSE
                 100 4/3/16  1:45:00 AM  79.0 40.5 RSOSE
                 101 4/3/16  2:00:00 AM  73.4 42.3 RSOSE
                 102 4/3/16  2:15:00 AM  73.6 40.1 RSOSE
                 103 4/3/16  2:30:00 AM  71.9 46.5 RSOSE
                 104 4/3/16  2:45:00 AM  70.6 45.4 RSOSE")

df[,2] <- paste(df[,2], df[,3], df[,4])
df <- df[,c(-3,-4)]

names(df) <- c("Index", "datetime", "Humid", "Temp", "id")