Tôi có một khung dữ liệu mà trông như sau:dplyr: giá trị tối đa trong một nhóm, không bao gồm giá trị trong mỗi hàng?
> df <- data_frame(g = c('A', 'A', 'B', 'B', 'B', 'C'), x = c(7, 3, 5, 9, 2, 4))
> df
Source: local data frame [6 x 2]
g x
1 A 7
2 A 3
3 B 5
4 B 9
5 B 2
6 C 4
tôi biết làm thế nào để thêm một cột với giá trị tối đa x
đối với từng nhóm g
:
> df %>% group_by(g) %>% mutate(x_max = max(x))
Source: local data frame [6 x 3]
Groups: g
g x x_max
1 A 7 7
2 A 3 7
3 B 5 9
4 B 9 9
5 B 2 9
6 C 4 4
Nhưng những gì tôi muốn là để nhận được là giá trị tối đa x
cho mỗi nhóm g
, không bao gồm giá trị x
trong mỗi hàng.
Đối với ví dụ được đưa ra, các đầu ra mong muốn sẽ trông như thế này:
Source: local data frame [6 x 3]
Groups: g
g x x_max x_max_exclude
1 A 7 7 3
2 A 3 7 7
3 B 5 9 9
4 B 9 9 5
5 B 2 9 9
6 C 4 4 NA
tôi nghĩ rằng tôi có thể có thể sử dụng row_number()
để loại bỏ các yếu tố đặc biệt và lấy tối đa là những gì còn lại, nhưng nhấn thông điệp cảnh báo và có sai -Inf
đầu ra:
> df %>% group_by(g) %>% mutate(x_max = max(x), r = row_number(), x_max_exclude = max(x[-r]))
Source: local data frame [6 x 5]
Groups: g
g x x_max r x_max_exclude
1 A 7 7 1 -Inf
2 A 3 7 2 -Inf
3 B 5 9 1 -Inf
4 B 9 9 2 -Inf
5 B 2 9 3 -Inf
6 C 4 4 1 -Inf
Warning messages:
1: In max(c(4, 9, 2)[-1:3]) :
no non-missing arguments to max; returning -Inf
2: In max(c(4, 9, 2)[-1:3]) :
no non-missing arguments to max; returning -Inf
3: In max(c(4, 9, 2)[-1:3]) :
no non-missing arguments to max; returning -Inf
các {có thể đọc được, ngắn gọn, hiệu quả} cách mà hầu hết để có được kết quả này trong dplyr là gì? Bất kỳ hiểu biết nào về lý do tại sao nỗ lực của tôi sử dụng row_number()
không hoạt động cũng sẽ được đánh giá cao. Cảm ơn đã giúp đỡ.
là mã này: tóm tắt (group_by (df, g), max.x = max (x))? –
Cảm ơn, @Shenglin Chen, nhưng điều đó không khớp với kết quả mong muốn trong ví dụ trên. Điều đó mang lại cho tôi giá trị 'x' tối đa cho mỗi nhóm (trả về một data_frame với 3 hàng). Nhưng những gì tôi muốn là một data_frame với cùng số hàng như bảng đầu vào, trong đó giá trị tại hàng 'r' cho giá trị' x' tối đa trong nhóm 'g', không bao gồm hàng' r'. Xem "đầu ra mong muốn" ở trên cho một ví dụ cụ thể. – Eric