首页 > 解决方案 > 如何在整齐的数据行之间进行数学运算?

问题描述

我想比较两个结果,一个来自 2018 年,另一个来自 2017 年,假设是两所学校。

在电子表格上,我将有一列 for result2017,另一列 for result2018,我会在新列上执行类似result2018-result2017的操作并获取每行所需的比较。

但是在整洁的数据中,或者至少我认为是整洁的数据,我不知道。

我发现的大多数教程都是关于如何使用收集或传播,而不是关于当你已经创建整洁的数据时该怎么做(这可能还没有)。

最小的可重现示例:

dd <- tibble(
  school=c("A","A","B","B"),
  year=c("2017","2018","2017","2018"),
  result=c(20,40,25,45)
)

标签: rtidyr

解决方案


我们可以spreadpaste'year' 列中的 'result' 字符串之后,然后做区别

library(dplyr)
library(tidyr)
library(stringr)
dd %>% 
    mutate(year = str_c('result', year)) %>% 
    spread(year, result) %>%
    mutate(comparison = result2018 - result2017)

如果打算在原始数据集中创建一列

dd %>% 
   group_by(school) %>% 
   mutate(comparison = result[year == 2018] - result[year == 2017])

推荐阅读