如何在 R 中以长格式获取具有数据帧的组之间的差异?
How to get the difference between groups with a dataframe in long format in R?
有一个包含 2 个 ID (N = 2) 和 2 个周期 (T = 2) 的简单数据帧,例如:
year id points
1 1 10
1 2 12
2 1 20
2 2 18
如何实现以下数据帧(最好使用 dplyr 或任何 tidyverse 解决方案)?
id points_difference
1 10
2 6
注意points_difference栏是每个ID在跨时间(即T2-T1)的差异。
此外,如何对多列和多个 ID(只有 2 个句点)进行泛化?
year id points scores
1 1 10 7
1 ... ... ...
1 N 12 8
2 1 20 9
2 ... ... ...
2 N 12 9
id points_difference scores_difference
1 10 2
... ... ...
N 0 1
如果您使用的是 dplyr
1.0.0(或更高版本),summarise
可以在输出中 return 多行,因此如果您有超过 2 个周期,这也适用。你可以这样做:
library(dplyr)
df %>%
arrange(id, year) %>%
group_by(id) %>%
summarise(across(c(points, scores), diff, .names = '{col}_difference'))
# id points_difference scores_difference
# <int> <int> <int>
#1 1 10 2
#2 1 -7 1
#3 2 6 2
#4 2 -3 3
数据
df <- structure(list(year = c(1L, 1L, 2L, 2L, 3L, 3L), id = c(1L, 2L,
1L, 2L, 1L, 2L), points = c(10L, 12L, 20L, 18L, 13L, 15L), scores = c(2L,
3L, 4L, 5L, 5L, 8L)), class = "data.frame", row.names = c(NA, -6L))
有一个包含 2 个 ID (N = 2) 和 2 个周期 (T = 2) 的简单数据帧,例如:
year id points
1 1 10
1 2 12
2 1 20
2 2 18
如何实现以下数据帧(最好使用 dplyr 或任何 tidyverse 解决方案)?
id points_difference
1 10
2 6
注意points_difference栏是每个ID在跨时间(即T2-T1)的差异。
此外,如何对多列和多个 ID(只有 2 个句点)进行泛化?
year id points scores
1 1 10 7
1 ... ... ...
1 N 12 8
2 1 20 9
2 ... ... ...
2 N 12 9
id points_difference scores_difference
1 10 2
... ... ...
N 0 1
如果您使用的是 dplyr
1.0.0(或更高版本),summarise
可以在输出中 return 多行,因此如果您有超过 2 个周期,这也适用。你可以这样做:
library(dplyr)
df %>%
arrange(id, year) %>%
group_by(id) %>%
summarise(across(c(points, scores), diff, .names = '{col}_difference'))
# id points_difference scores_difference
# <int> <int> <int>
#1 1 10 2
#2 1 -7 1
#3 2 6 2
#4 2 -3 3
数据
df <- structure(list(year = c(1L, 1L, 2L, 2L, 3L, 3L), id = c(1L, 2L,
1L, 2L, 1L, 2L), points = c(10L, 12L, 20L, 18L, 13L, 15L), scores = c(2L,
3L, 4L, 5L, 5L, 8L)), class = "data.frame", row.names = c(NA, -6L))