Разделение нескольких наблюдений R - PullRequest
0 голосов
/ 16 ноября 2018

У меня есть два столбца в кадре данных, Worker_ID и Location_ID. Каждая строка содержит местоположение, в котором находился конкретный работник. Эти столбцы могут иметь несколько одинаковых идентификаторов Worker_ID, основанных на разных идентификаторах Location_ID или одинаковых. Эти данные за несколько месяцев, поэтому возможно наличие нескольких одинаковых строк идентификаторов рабочих и местоположений.

Пример ниже:

Worker_ID      Location_ID
124893842      43432585855
148934855      38495485433
243243535      53535958383

Я хотел бы отобразить эти данные, чтобы видеть каждый Worker_ID и все соответствующие местоположения в столбцах рядом с ним, чтобы впоследствии я мог визуализировать эти данные. Я попытался изменить форму, но я не могу заставить его работать правильно. Кто-нибудь знает, как я могу это сделать?

Ответы [ 2 ]

0 голосов
/ 16 ноября 2018

Предполагая, что у вас есть ограниченное количество уникальных значений location_id для каждого worker_id, вы можете сделать что-то вроде этого:

library(dplyr)
library(tidyr)

df <- data_frame(
  worker_id = c(1, 1, 2, 2, 3, 3),
  location_id = c(1, 2, 3, 4, 1, 4)
  )
df %>%
  group_by(worker_id) %>%
  mutate(location_number = row_number()) %>%
  spread(location_number, location_id, sep = '_')

# A tibble: 3 x 3
# Groups:   worker_id [3]
  worker_id location_number_1 location_number_2
*     <dbl>             <dbl>             <dbl>
1         1                 1                 2
2         2                 3                 4
3         3                 1                 4

Я использовал некоторые выдуманные данные, поскольку ваши данные не представляются вашей проблемой, ижелаемый вывод.Это решение будет работать, но выдает столько столбцов, сколько максимальное количество уникальных местоположений, в котором находится один работник.

0 голосов
/ 16 ноября 2018

Это решение создает список векторов, содержащих местоположения для каждого уникального идентификатора Worker_ID.

l <- lapply(unique(d$Worker_ID), function(x) d[d$Worker_ID==x, 'Location_ID'])
names(l) <- unique(d$Worker_ID)
print(l)

# $`124893842`
# [1] 43432585855
# 
# $`148934855`
# [1] 38495485433 53535958383 53535958384 53535958385
# 
# $`243243535`
# [1] 53535958383

(я добавил несколько записей, чтобы расширить набор данных и проиллюстрировать точку)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...