Это то, над чем я работал некоторое время, просто создавая отдельные кадры данных и делая full_join, но я думаю, что есть более простой способ.R: Транспонирование из длинной в широкую и агрегирующую строки с совпадением ID
В целом, я хочу рассчитать разницу между значением индивидуального идентификатора от времени 1 до времени 2 по типу из кадра данных длинной формы. Это один из способов, по-моему, я мог бы это сделать, но если у других людей есть другие методы или идеи, я тоже хотел бы их услышать.
Однако я также хотел бы знать, как решить эту проблему переноса, так как мне любопытно.
Вот моя проблема.
У меня есть кадр данных в длинной форме с 5 различными измерениями для двух разных периодов времени. Я хочу преобразовать этот фрейм данных из длинной формы в широкую форму, чтобы вместо этого иметь вид DF (обратите внимание, что не все типы включены - только 2 для длины):
(пример df1)
ID Time Value Type
1 1 7 Type1
1 2 8 Type1
2 1 9 Type1
2 2 10 Type1
1 1 13 Type2
1 2 15 Type2
2 1 17 Type2
2 2 19 Type2
Я хочу, чтобы выглядеть следующим образом:
(пример DF 2)
ID Type1.1 Type1.2 Type2.1 Type2.2
1 7 8 13 15
2 9 10 17 19
Я использую:
library(dplyr)
library(tidyr)
df.new <- df %>%
spread(Type, Measurement.Value)
и получить это из примера ф.р. 1, которая находится на правильном пути:
(пример ДФ 3)
ID Time Type1 Type2
1 1 7 13
1 2 8 15
2 1 9 17
2 2 10 19
Но теперь я хочу, чтобы распространить время для каждого типа. Когда я делаю что-то вроде этого на примере DF3:
newer.df <- df.new %>%
spread(Time, Type1)
сделать это:
ID Type1.1 Type1.2
1 7 NA
1 NA 8
2 9 NA
2 NA 10
Таким образом, он производит ЧА для каждой строки - есть способ, которым я могу свернуть строки по каждому другой по ID? Кажется, я что-то упускаю.
Помните, что в моем примере кода я использую только 2 типа, но на самом деле у меня есть 5 типов - просто хотел дать упрощенный код.
Это сработало! Большое спасибо. Я попытался использовать пакет 'reshape', используя' cast() ', но получал ту же проблему. Я рад видеть, что у 'reshape2' было мое решение. – Pete