Мы можем заменить уникальные адреса суффиксами "Place"
+, используя match
и unique
, создать уникальный индекс для каждого ID
и получить данные в широком формате, используя pivot_wider
.
library(dplyr)
df1 <- df %>%
mutate(Address = paste0('Place', match(Address, unique(Address)))) %>%
group_by(ID) %>%
mutate(row = paste0('x', row_number())) %>%
tidyr::pivot_wider(names_from = row, values_from = Address)
df1
# ID x1 x2 x3 x4
# <int> <chr> <chr> <chr> <chr>
#1 1001 Place1 Place1 Place2 NA
#2 1002 Place3 Place1 NA NA
#3 1003 Place3 NA NA NA
#4 1004 Place2 Place3 Place3 Place1
Для экспорта в CSV мы можем использовать write.csv
write.csv(df1, 'newfile.csv', row.names = FALSE)
data
df <- structure(list(ID = c(1001L, 1001L, 1001L, 1002L, 1002L, 1003L,
1004L, 1004L, 1004L, 1004L), Address = structure(c(1L, 1L, 2L,
3L, 1L, 3L, 2L, 3L, 3L, 1L), .Label = c("123 E example rd, 12300",
"456 W example rd, 45600", "789 N example rd, 78900"), class = "factor")),
class = "data.frame", row.names = c(NA, -10L))