R中间隔不均匀的多个文件的分箱
Binning of multiple files with uneven intervals in R
我有很多行数不等的文件。
一个文件的数据如下所示:
Height Temp
1014.0 22.4
992.0 23
850.0 15.2
557.0 -6.1
407.0 -17.1
314.0 -29.5
200 -51.9
我想取以下区间内的平均值。
1000-925
925-850
850-700
700-600
600-500
500-400
400-300
300-200
200-100
100-0
我必须对具有不同高度值的多个文件执行此操作。
关于如何在 R 中正确执行此操作的任何建议?
我将不胜感激任何帮助。
你可以用cut
对你的身高进行分组,然后分组汇总:
library(dplyr)
mutate(df, category = cut(Height, c(seq(0, 700, 100), 850, 925, 1000, Inf))) %>%
group_by(category) %>%
summarise(average_height = mean(Height, na.rm = TRUE))
# A tibble: 7 x 2
category average_height
<fct> <dbl>
1 (100,200] 200
2 (300,400] 314
3 (400,500] 407
4 (500,600] 557
5 (700,850] 850
6 (925,1e+03] 992
7 (1e+03,Inf] 1014
这里的一个选择是使用 sqldf
,使用日历 table 连接和聚合方法:
library(sqldf)
sql <- "SELECT c.min_temp, c.max_temp, AVG(t.Temp) AS temp_avg
FROM temps c
LEFT JOIN df t ON t.Temp > c.min_temp AND t.Temp <= c.max_temp
GROUP BY c.min_temp, c.max_temp"
result <- sqldf(sql)
数据:
# this data frame stores the temperature ranges for the averages
temps <- data.frame(min_temp=c(0, 100, 200, 300, 400, 500, 600, 700, 850, 925),
max_temp=c(100, 200, 300, 400, 500, 600, 700, 850, 925, 1000))
Base R 中的另一种选择,使用 findInterval
创建组并使用 aggregate
按组获取 mean
。
df$group <- findInterval(df$Height, c(seq(0, 700, 100), 850, 925, 1000))
aggregate(Height~group, df, mean)
我有很多行数不等的文件。
一个文件的数据如下所示:
Height Temp
1014.0 22.4
992.0 23
850.0 15.2
557.0 -6.1
407.0 -17.1
314.0 -29.5
200 -51.9
我想取以下区间内的平均值。
1000-925
925-850
850-700
700-600
600-500
500-400
400-300
300-200
200-100
100-0
我必须对具有不同高度值的多个文件执行此操作。
关于如何在 R 中正确执行此操作的任何建议? 我将不胜感激任何帮助。
你可以用cut
对你的身高进行分组,然后分组汇总:
library(dplyr)
mutate(df, category = cut(Height, c(seq(0, 700, 100), 850, 925, 1000, Inf))) %>%
group_by(category) %>%
summarise(average_height = mean(Height, na.rm = TRUE))
# A tibble: 7 x 2
category average_height
<fct> <dbl>
1 (100,200] 200
2 (300,400] 314
3 (400,500] 407
4 (500,600] 557
5 (700,850] 850
6 (925,1e+03] 992
7 (1e+03,Inf] 1014
这里的一个选择是使用 sqldf
,使用日历 table 连接和聚合方法:
library(sqldf)
sql <- "SELECT c.min_temp, c.max_temp, AVG(t.Temp) AS temp_avg
FROM temps c
LEFT JOIN df t ON t.Temp > c.min_temp AND t.Temp <= c.max_temp
GROUP BY c.min_temp, c.max_temp"
result <- sqldf(sql)
数据:
# this data frame stores the temperature ranges for the averages
temps <- data.frame(min_temp=c(0, 100, 200, 300, 400, 500, 600, 700, 850, 925),
max_temp=c(100, 200, 300, 400, 500, 600, 700, 850, 925, 1000))
Base R 中的另一种选择,使用 findInterval
创建组并使用 aggregate
按组获取 mean
。
df$group <- findInterval(df$Height, c(seq(0, 700, 100), 850, 925, 1000))
aggregate(Height~group, df, mean)