在 R/dplyr 中的分组变量级别之间执行操作
Performing operation among levels of grouped variable in R/dplyr
我想在分组变量的级别之间执行计算,并将其放入 dplyr/tidyverse 样式的工作流中。我知道这是令人困惑的措辞,但我希望下面的示例有助于澄清。
下面,我想找出我有数据的每一年“A”级和“B”级之间的差异。一种解决方案是将数据从长格式转换为宽格式,并使用 mutate() 找出 A 和 B 之间的差异,并用结果创建一个新列。
最终,我正在处理一个更大的数据集,其中对于 N 个物种中的每一个,以及每年的抽样,我想找到一些测量变量的响应比。能够将计算保持在长格式工作流中将极大地帮助以后使用数据。
library(tidyverse)
library(reshape)
set.seed(34)
test = data.frame(Year = rep(seq(2011,2020),2),
Letter = rep(c('A','B'),each = 10),
Response = sample(100,20))
test.results = test %>%
cast(Year ~ Letter, value = 'Response') %>%
mutate(diff = A - B)
#test.results
Year A B diff
2011 93 48 45
2012 33 44 -11
2013 9 80 -71
2014 10 61 -51
2015 50 67 -17
2016 8 43 -35
2017 86 20 66
2018 54 99 -45
2019 29 100 -71
2020 11 46 -35
是否有一些解决方案可以让我按年份分组,然后使用像 summarize() 这样的函数在变量“Letters”的级别之间进行计算?
group_by(Year)%>%
summarise( "something here to perform a calculation between levels A and B of the variable "Letters")
您可以对 "A"
和 "B"
的 Response
值进行子集化,然后取差值。
library(dplyr)
test %>%
group_by(Year) %>%
summarise(diff = Response[Letter == 'A'] - Response[Letter == 'B'])
# Year diff
# <int> <int>
# 1 2011 45
# 2 2012 -11
# 3 2013 -71
# 4 2014 -51
# 5 2015 -17
# 6 2016 -35
# 7 2017 66
# 8 2018 -45
# 9 2019 -71
#10 2020 -35
在这个例子中,我们还可以利用这样一个事实,即如果我们 arrange
数据 "A"
会在 "B"
之前出现,所以我们可以使用 diff
:
test %>%
arrange(Year, desc(Letter)) %>%
group_by(Year) %>%
summarise(diff = diff(Response))
我想在分组变量的级别之间执行计算,并将其放入 dplyr/tidyverse 样式的工作流中。我知道这是令人困惑的措辞,但我希望下面的示例有助于澄清。
下面,我想找出我有数据的每一年“A”级和“B”级之间的差异。一种解决方案是将数据从长格式转换为宽格式,并使用 mutate() 找出 A 和 B 之间的差异,并用结果创建一个新列。
最终,我正在处理一个更大的数据集,其中对于 N 个物种中的每一个,以及每年的抽样,我想找到一些测量变量的响应比。能够将计算保持在长格式工作流中将极大地帮助以后使用数据。
library(tidyverse)
library(reshape)
set.seed(34)
test = data.frame(Year = rep(seq(2011,2020),2),
Letter = rep(c('A','B'),each = 10),
Response = sample(100,20))
test.results = test %>%
cast(Year ~ Letter, value = 'Response') %>%
mutate(diff = A - B)
#test.results
Year A B diff
2011 93 48 45
2012 33 44 -11
2013 9 80 -71
2014 10 61 -51
2015 50 67 -17
2016 8 43 -35
2017 86 20 66
2018 54 99 -45
2019 29 100 -71
2020 11 46 -35
是否有一些解决方案可以让我按年份分组,然后使用像 summarize() 这样的函数在变量“Letters”的级别之间进行计算?
group_by(Year)%>%
summarise( "something here to perform a calculation between levels A and B of the variable "Letters")
您可以对 "A"
和 "B"
的 Response
值进行子集化,然后取差值。
library(dplyr)
test %>%
group_by(Year) %>%
summarise(diff = Response[Letter == 'A'] - Response[Letter == 'B'])
# Year diff
# <int> <int>
# 1 2011 45
# 2 2012 -11
# 3 2013 -71
# 4 2014 -51
# 5 2015 -17
# 6 2016 -35
# 7 2017 66
# 8 2018 -45
# 9 2019 -71
#10 2020 -35
在这个例子中,我们还可以利用这样一个事实,即如果我们 arrange
数据 "A"
会在 "B"
之前出现,所以我们可以使用 diff
:
test %>%
arrange(Year, desc(Letter)) %>%
group_by(Year) %>%
summarise(diff = diff(Response))