Dưới đây là một cách với dplyr
. Tôi không chắc chắn nếu ATRSLBL
là ký tự hoặc yếu tố. Giả định của tôi là nó là một yếu tố. Trước tiên, tôi đã chuyển đổi ATRSLBL
thành ký tự. Sau đó, tôi đã thay thế được sao chép Red
và Blue
bằng ""
. Tôi cũng đã tạo biến nhóm bằng cách sử dụng cumsum()
trong phần mutate()
đầu tiên. Sử dụng biến nhóm, tôi đã nhóm dữ liệu và áp dụng replace()
cho CENTRE
. Ở đây, tôi đang nói R nếu số hàng của mỗi nhóm không phải là 1, thay thế bất kỳ ký tự nào thành ""
. Do đó, bạn giữ thông tin trong hàng đầu tiên của mỗi nhóm. Sau đó, bạn hủy nhóm dữ liệu và xóa biến nhóm bằng cách sử dụng select()
. Tôi hy vọng điều này sẽ giúp bạn.
library(dplyr)
mutate(mydf,
ATRSLBL = replace(as.character(ATRSLBL), which(duplicated(ATRSLBL) == TRUE), ""),
group = cumsum(c(T, abs(diff(CENTRE)) > 1))) %>%
group_by(group) %>%
mutate(CENTRE = replace(CENTRE, which(row_number(CENTRE) != 1), "")) %>%
ungroup %>%
select(-group)
# ATRSLBL POPUL CENTRE BAGE BAGEC1 SEX
# (chr) (fctr) (chr) (int) (int) (int)
#1 Red PPS 37201 75 3 1
#2 PPS 71 2 2
#3 PPS 73 2 1
#4 PPS 38201 66 2 2
#5 Blue PPS 37201 78 3 2
#6 PPS 38201 71 2 2
#7 PPS 71 2 1
#8 PPS 64 1 2
DỮ LIỆU
mydf <- structure(list(ATRSLBL = structure(c(2L, 2L, 2L, 2L, 1L, 1L,
1L, 1L), .Label = c("Blue", "Red"), class = "factor"), POPUL = structure(c(1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = "PPS", class = "factor"),
CENTRE = c(37201L, 37201L, 37201L, 38201L, 37201L, 38201L,
38201L, 38201L), BAGE = c(75L, 71L, 73L, 66L, 78L, 71L, 71L,
64L), BAGEC1 = c(3L, 2L, 2L, 2L, 3L, 2L, 2L, 1L), SEX = c(1L,
2L, 1L, 2L, 2L, 2L, 1L, 2L)), .Names = c("ATRSLBL", "POPUL",
"CENTRE", "BAGE", "BAGEC1", "SEX"), class = "data.frame", row.names = c(NA,
-8L))
Hi akrun, cảm ơn bạn đã giúp đỡ của bạn. Bạn có thể vui lòng đưa ra ví dụ cho chỉ biến ATRSLBL. Nó sẽ giúp tôi hiểu rõ hơn –