2015-10-13 3 views
3

Я пытаюсь вложить некоторые длинные данные в широкие, но не могу понять, как привязать определенные переменные к уникальному идентификатору. Следующее делает то, что мне нужно для этого, за исключением того, что оно падает на lat и long, которые привязаны к каждому номеру gridNumber. Я хотел бы держать их, когда они будут широко.Сохранять переменные при литье

dput:

df <- structure(list(gridNumber = c("17578", "18982", "18983", "18984", 
"18985", "18986", "18987", "18988", "18989", "18990"), value = c(22.7000007629395, 
22.2900009155273, 22.25, 21.9799995422363, 21.1000003814697, 
20.7700004577637, 20.6200008392334, 20.5699996948242, 20.5699996948242, 
20.5799999237061), lat = c(-95.1249999994964, -95.1666666661633, 
-95.1249999994964, -95.0833333328295, -95.0416666661626, -94.9999999994957, 
-94.9583333328288, -94.9166666661619, -94.874999999495, -94.8333333328281 
), long = c(49.4166666666667, 49.375, 49.375, 49.375, 49.375, 
49.375, 49.375, 49.375, 49.375, 49.375), ID = c("PRISM_ppt_stable_4kmM2_190001_bil", 
"PRISM_ppt_stable_4kmM2_190001_bil", "PRISM_ppt_stable_4kmM2_190001_bil", 
"PRISM_ppt_stable_4kmM2_190001_bil", "PRISM_ppt_stable_4kmM2_190001_bil", 
"PRISM_ppt_stable_4kmM2_190001_bil", "PRISM_ppt_stable_4kmM2_190001_bil", 
"PRISM_ppt_stable_4kmM2_190001_bil", "PRISM_ppt_stable_4kmM2_190001_bil", 
"PRISM_ppt_stable_4kmM2_190001_bil")), .Names = c("gridNumber", 
"value", "lat", "long", "ID"), class = c("data.table", "data.frame" 
), row.names = c(NA, -10L)) 

Код:

library(data.table) 
wide <- dcast.data.table(df, gridNumber~ID, value = 'value') 
+3

Не нужно использовать «.data.table». Просто «dcast» достаточно от v1.9.6 + – Arun

ответ

7

Чтобы объяснить @Frank комментарий (и правильный ответ), то формула литая принимает форму LHS ~ RHS. LHS - это набор столбцов, которые вы хотите быть ключом строки, и аналогичным образом для столбцов в RHS. Так что если вы хотите сохранить gridNumber, широчайший и длинный, как уникальный ключ для каждого из ваших рядов, затем установите LHS в gridNumber + lat + long так:

wide <- dcast.data.table(df, gridNumber + lat + long ~ ID, value = 'value') 

dcast может использоваться вместо dcast.data.table, как отмечает @ Arun (для любой версии> = 1.9.6, в настоящее время на CRAN).

+1

спасибо @akrun за указание этого – pcantalupo

+0

Yup, который сделал это. Благодаря @Frank. – Vedda