R:数据帧中两列数据每小时平均15分钟的数据
我的数据如下所示(为了简单起见,我删除了其他几列。) 我想通过id获得每小时的平均温度和湿度。我想要得到的结果是:(为了简单起见,我想删除每个记录中的其他数据列。) 更新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
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")