У меня есть следующие данные
library(dplyr)
df1 <- tibble(
year = c("2001","2001", "2001", "2001", "2002","2002", "2002", "2002"),
type = c("Animals", "Animals", "People", "People", "Animals", "Animals", "People", "People"),
type_group = c("Dogs", "Cats", "John", "Jane", "Dogs", "Cats", "John", "Jane"),
analysis1 = c(32.7, 67.5, 34.6, 56.5, 56.7, 78.5, 98.9, 87.3),
analysis2 = c(23.7, 89.4, 45.8, 98.6, 45.7, 45.7, 23.6, 23.6),
analysis3 = c(45.7, 45.7, 23.6, 23.6, 14.4, 45.4, 98.0, 12.2),
analysis4 = c(14.4, 45.4, 98.0, 12.2, 34.6, 44.3, 23.8, 16.3))
Я использую rbind
для создания новых строк с некоторыми новыми вычислениями, которые вы увидите в коде ниже.
Я хочузнать, есть ли более аккуратный и быстрый способ сделать это. Я уверен, что должно быть ... мои данные содержат около 30 лет и около 60 переменных, поэтому, чтобы использовать разработанный мной пример, потребовались бы годы, чтобы написать в сценарии мои реальные данные:
df1 %>%
filter(year =="2001") %>%
rbind(c("2001", "People diff","John and Jane",
df1$analysis1[df1$type_group == 'John'] - df1$analysis1[df1$type_group == 'Jane'],
df1$analysis2[df1$type_group == 'John'] - df1$analysis2[df1$type_group == 'Jane'],
df1$analysis3[df1$type_group == 'John'] - df1$analysis3[df1$type_group == 'Jane'],
df1$analysis4[df1$type_group == 'John'] - df1$analysis4[df1$type_group == 'Jane'])) %>%
rbind(c("2001","Animals diff","Dogs and cats",
df1$analysis1[df1$type_group == 'Cats'] - df1$analysis1[df1$type_group == 'Dogs'],
df1$analysis2[df1$type_group == 'Cats'] - df1$analysis2[df1$type_group == 'Dogs'],
df1$analysis3[df1$type_group == 'Cats'] - df1$analysis3[df1$type_group == 'Dogs'],
df1$analysis4[df1$type_group == 'Cats'] - df1$analysis4[df1$type_group == 'Dogs'])) -> data_2001
df1 %>%
filter(year =="2002") %>%
rbind(c("2002", "People diff","John and Jane",
df1$analysis1[df1$type_group == 'John'] - df1$analysis1[df1$type_group == 'Jane'],
df1$analysis2[df1$type_group == 'John'] - df1$analysis2[df1$type_group == 'Jane'],
df1$analysis3[df1$type_group == 'John'] - df1$analysis3[df1$type_group == 'Jane'],
df1$analysis4[df1$type_group == 'John'] - df1$analysis4[df1$type_group == 'Jane'])) %>%
rbind(c("2002","Animals diff","Dogs and cats",
df1$analysis1[df1$type_group == 'Cats'] - df1$analysis1[df1$type_group == 'Dogs'],
df1$analysis2[df1$type_group == 'Cats'] - df1$analysis2[df1$type_group == 'Dogs'],
df1$analysis3[df1$type_group == 'Cats'] - df1$analysis3[df1$type_group == 'Dogs'],
df1$analysis4[df1$type_group == 'Cats'] - df1$analysis4[df1$type_group == 'Dogs'])) -> data_2002
rbind(data_2001, data_2002) -> final_data
Любая помощь приветствуется! Спасибо