Изменить 4 переменных сразу - PullRequest
0 голосов
/ 19 ноября 2018

У меня есть набор данных, который разделяет HOME_ID и WORK_ID WORKER_ID на основе широты и долготы, но все в одной строке.Я хотел бы изменить форму long, чтобы HOME_ID и WORK_ID находились в одном столбце, а также в других переменных.Ниже приведен пример данных:

WORKER_ID    WORK_ID    HOME_ID    LAT_WORK   LONG_WORK    LAT_HOME   LONG_HOME
32435353     23434343   32435353   39.54      41.53       39.64        42.43

Мне бы хотелось, чтобы это выглядело так:

WORKER_ID   ID        LAT   LONG
32435353   23434343   39.54 41.53  
32435353   32435353   39.64 42.43

Я получаю кучу сообщений об ошибках при попытке изменить форму, и мне было интересноесли бы кто-нибудь знал правильный синтаксис.Заранее спасибо.

Ответы [ 2 ]

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

Вы можете использовать функцию gather из tidyr или функцию melt из data.table точно так же, как сказал akrun .

Также akrun Код data.table окончательно работает, когда я воспроизводю ваш пример OP.

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

Мы можем использовать melt из data.table

library(data.table)
melt(setDT(df1), measure = patterns("(WORK|HOME)_ID", "LAT", "LONG"),
  value.name = c("ID", "LAT", "LONG"))[, variable := NULL][]
#    WORKER_ID       ID   LAT  LONG
#1:  32435353 23434343 39.54 41.53
#2:  32435353 32435353 39.64 42.43

данные

df1 <- structure(list(WORKER_ID = 32435353L, WORK_ID = 23434343L, 
    HOME_ID = 32435353L, 
LAT_WORK = 39.54, LONG_WORK = 41.53, LAT_HOME = 39.64, 
LONG_HOME = 42.43), class = "data.frame", row.names = c(NA, 
 -1L))
...