我有一个有批号的数据集,每天以英寸为单位。很多批号都是重复的,我想找出某一批的最高值,一天内的最高值。因此,作为示例数据,我有:
day1= c( 1, 1.2, 1.5, 4, 6.2, NA, 7, 3.4, 3.4, 3.2)
day2= c( NA, 2.2, 1.9, 4.7, 6.9, NA, 11.1, 3.9, 3.9, 3.4)
day3= c( .9, 1.2, .8, 4, 5.9, NA, 5.2, 1.2, 1.2, .8)
lot= c("id-1", "id-1", "id-1", "id-2", "id-3", "id-4", "id-4", "id-5", "id-5", "id-5")
df <-data.frame(day1, day2, day3, lot)我想得到的是这样的东西:
> head(df_slim, n=10)
day1 day2 day3 lot
1 1.5 2.2 1.2 id-1
2 4.0 4.7 4.0 id-2
3 6.2 6.9 5.9 id-3
4 7.0 11.1 5.2 id-4
5 3.4 3.9 1.2 id-5我正在尝试下面的代码,但我知道我没有接近,并希望你能指出我的正确方向!谢谢!
df_slim <- df %>% group_by(lot) %>% df[which.max(df$day1),]发布于 2021-09-26 21:21:07
此代码将给出lot每天的最大值。
library(dplyr)
df %>%
group_by(lot) %>%
summarise(across(.cols = starts_with("day"),.fns = ~max(.,na.rm = TRUE)))
# A tibble: 5 x 4
lot day1 day2 day3
<chr> <dbl> <dbl> <dbl>
1 id-1 1.5 2.2 1.2
2 id-2 4 4.7 4
3 id-3 6.2 6.9 5.9
4 id-4 7 11.1 5.2
5 id-5 3.4 3.9 1.2发布于 2021-09-26 21:20:45
如果需要对每一列分别执行此操作
library(dplyr)
df %>%
group_by(lot) %>%
summarise(across(everything(), ~ .[which.max(.)]))-output
# A tibble: 5 × 4
lot day1 day2 day3
<chr> <dbl> <dbl> <dbl>
1 id-1 1.5 2.2 1.2
2 id-2 4 4.7 4
3 id-3 6.2 6.9 5.9
4 id-4 7 11.1 5.2
5 id-5 3.4 3.9 1.2或者使用summarise_all
df %>%
group_by(lot) %>%
summarise_all(max, na.rm = TRUE)
# A tibble: 5 × 4
lot day1 day2 day3
<chr> <dbl> <dbl> <dbl>
1 id-1 1.5 2.2 1.2
2 id-2 4 4.7 4
3 id-3 6.2 6.9 5.9
4 id-4 7 11.1 5.2
5 id-5 3.4 3.9 1.2或者使用data.table
library(data.table)
setDT(df)[, lapply(.SD, max, na.rm = TRUE), lot]
lot day1 day2 day3
1: id-1 1.5 2.2 1.2
2: id-2 4.0 4.7 4.0
3: id-3 6.2 6.9 5.9
4: id-4 7.0 11.1 5.2
5: id-5 3.4 3.9 1.2或使用collapse
library(collapse)
fmax(nv(df), g = df$lot)
day1 day2 day3
id-1 1.5 2.2 1.2
id-2 4.0 4.7 4.0
id-3 6.2 6.9 5.9
id-4 7.0 11.1 5.2
id-5 3.4 3.9 1.2也可以在base R和aggregate中完成。
aggregate(.~ lot, df, max)
lot day1 day2 day3
1 id-1 1.5 2.2 1.2
2 id-2 4.0 4.7 4.0
3 id-3 6.2 6.9 5.9
4 id-4 7.0 11.1 5.2
5 id-5 3.4 3.9 1.2https://stackoverflow.com/questions/69339030
复制相似问题