Образец данных:Вставить преобразование в новую строку, а не колонки
Date <- as.Date(c('1-01-2008','2-01-2008', '3-01-2008', '1-01-2008','2-01- 2008', '3-01-2008','1-01-2008','2-01-2008', '3-01-2008', '1-01-2008','2-01-2008', '3-01-2008'), format = "%m-%d-%Y")
Country <- c('US', 'US','US', 'JP', 'JP', 'JP', 'US', 'US','US', 'JP', 'JP', 'JP')
Category <- c('Apple', 'Apple', 'Apple', 'Apple', 'Apple', 'Apple', 'foo', 'foo','foo', 'foo','foo', 'foo')
Value <- c(runif(12, -0.5, 10))
df <- data.frame(Date, Country, Category, Value)
То, что я хочу сделать, это вычесть для каждого месяца и в каждой стране значения Apple, и обув (так для США и 2008-01- 01 значение будет -1.2357797). Однако я хочу, чтобы вставить результат в виде строки, с указанием категории, например. «Дифференциал».
я понял, как сделать это с dplyr/мутировать, но только вставив целый новый столбец, в этом случае таблица не имеет смысла больше (как категории не подходят и я преобразования в список ниже):
df <- df %>%
group_by(Country, Date) %>%
mutate(
diff = Value[Category=="Apple"] - Value[Category=="foo"])
Edit: Важно: Я хочу добавить несколько преобразований таким образом, не только различия, упомянутые в данном примере.
Редактировать2: Спасибо за все полезные ответы. Используя метод tidyr/dplyr предложенный @akrun я буду использовать это, чтобы вставить больше преобразований:
library(tidyr)
library(dplyr)
df <- spread(df, Category, Value) %>%
mutate(diff=Apple- foo, xyz = Apple+foo) %>%
gather(Category, Value, Apple:diff, Apple:xyz)
В правки, вместо 'собрать (категория, стоимость, Apple: Diff, Apple: хуг)' вы должны просто использовать 'собрать (категория, стоимость, Apple: хуг)' –