Я бы хотел изменить кадр данных с длинного на широкий (фиктивные данные приведены ниже). Мой реальный фрейм данных имеет много (более 40) числовых переменных, но я хотел бы выбрать только три из последних при изменении формы.
Опции, которые я нашел до сих пор, включают:
(1) изменить одну переменную, используя dcast()
:
library(reshape2)
dcast(d, group1 + group2 ~ location, value.var = "mass")
(2) изменить все переменные, используя reshape()
:
reshape(d, idvar = c("group1", "group2"), timevar = "location", sep = ".",
direction = "wide")
(3) создайте вектор переменных, которые я бы хотел исключить, с именем variables.to.drop
и передайте его reshape()
:
variables.to.drop <- c("diameter", "volume")
reshape(d, idvar = c("group1", "group2"), timevar = "location", sep = ".",
direction = "wide", drop = variables.to.drop)
но я не нашел функцию, которая принимает вектор или список переменных для изменения формы. В основном версия dcast()
, которая позволяет передавать список или вектор в аргумент value.var
, будет соответствовать всем требованиям. Есть ли такая функция, с которой я не сталкивался?
(Я понимаю, что могу подмножество данных перед выполнением операции изменения формы, но было бы намного проще просто указать переменные в функции изменения формы - поскольку использование subset()
потребовало бы указания всех переменных ID, которые должны быть включены, в то время как идентификаторы распознаются автоматически в большинстве функций изменения формы. Я мог бы просто использовать аргумент drop
в reshape()
, как указано выше, но я хочу выбрать 3 переменные из 40+, так что это громоздко.)
d <- structure(list(group1 = structure(c(1L, 2L, 1L, 2L, 1L, 2L, 1L,
2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L,
2L, 1L, 2L, 1L, 2L, 1L, 2L), .Label = c("ripe", "unripe"), class = "factor"),
group2 = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 5L, 5L, 5L,
5L, 5L, 5L, 3L, 3L, 3L, 3L, 3L, 3L, 2L, 2L, 2L, 2L, 2L, 2L,
4L, 4L, 4L, 4L, 4L, 4L), .Label = c("apple", "grapefruit",
"orange", "peach", "pear"), class = "factor"), type = structure(c(2L,
2L, 2L, 1L, 1L, 1L, 2L, 2L, 2L, 1L, 1L, 1L, 2L, 2L, 2L, 1L,
1L, 1L, 2L, 2L, 2L, 1L, 1L, 1L, 2L, 2L, 2L, 1L, 1L, 1L), .Label = c("large",
"small"), class = "factor"), location = structure(c(1L, 2L,
3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L,
3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L), .Label = c("P1",
"P2", "P3"), class = "factor"), diameter = c(17.2, 19.1,
18.5, 23.3, 22.9, 19.4, 11.1, 11.8, 6.8, 3.2, 7.9, 5.6, 8.4,
9.2, 9.7, 17.1, 19.4, 18.9, 11.8, 10.6, 10.1, 18.8, 17.9,
13.2, 8.5, 8.9, 7.2, 10.1, 8.7, 6.6), mass = c(11.1370341130532,
16.2229940481484, 16.0927473288029, 16.2337944167666, 18.6091538355686,
16.4031060528941, 10.0949575635605, 12.3255050601438, 16.6608375823125,
15.1425114134327, 16.9359129178338, 15.4497483558953, 12.8273358359002,
19.2343348427676, 12.9231584025547, 18.3729562815279, 12.8622328466736,
12.6682078000158, 11.8672278965823, 12.3222591052763, 13.1661245482974,
13.0269337072968, 11.590460028965, 10.3999591805041, 12.1879954100586,
18.1059855245985, 15.2569754677825, 19.1465816600248, 18.3134504687041,
10.4577026329935), volume = c(39.1218296485022, 35.3037334373221,
36.0934440605342, 40.1461374014616, 33.6219241656363, 45.1934127090499,
34.0249607525766, 35.1761963730678, 49.8430083505809, 46.1470468062907,
41.0666718147695, 42.9281218815595, 36.2364861415699, 42.4363839626312,
36.5954035148025, 40.0399494590238, 43.5418905457482, 39.6998247830197,
34.8785765469074, 45.3091957513243, 31.4755976013839, 36.193732037209,
44.3454348668456, 40.0909182429314, 33.0599791789427, 40.0786697631702,
39.879218460992, 45.0240039406344, 33.4929964784533, 46.9678482087329
)), .Names = c("group1", "group2", "type", "location", "diameter",
"mass", "volume"), row.names = c(NA, -30L), class = "data.frame")