Как пометить большое количество точек данных, используя для l oop в r? - PullRequest
0 голосов
/ 21 апреля 2020

У меня есть набор данных, который содержит ID и Address, связанные с ID. Примером может быть:

ID   Address
1001 123 E example rd, 12300
1001 123 E example rd, 12300
1001 456 W example rd, 45600
1002 789 N example rd, 78900
1002 123 E example rd, 12300
1003 789 N example rd, 78900
1004 456 W example rd, 45600
1004 789 N example rd, 78900
1004 789 N example rd, 78900
1004 123 E example rd, 12300

Теперь в приведенном выше примере у нас есть 3 уникальных идентификатора. Я хочу пометить их как место 1, место 2 и место 3. Наконец, я хочу иметь структуру данных, как показано ниже:

ID     x1        x2        x3          x4 
1001   Place 1   Place 1   Place 2
1002   Place 3   Place 1
1003   Place 3
1004   Place 2   Place 3   Place 3     Place 1

Поскольку в моем реальном наборе данных у меня есть около 3000 уникальных адресов, я ищет код, который может l oop вокруг и помечать все 3000 адресов от места 1 до места 3000.

1 Ответ

2 голосов
/ 21 апреля 2020

Мы можем заменить уникальные адреса суффиксами "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))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...