r - 如何在 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列是跨时间(即 T2 - T1)中每个 ID 之间的差异。
此外,如何概括多列和多个 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
则可以在输出中返回多行,因此如果您有 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))
推荐阅读
- nginx - Nginx全球服务器块?
- java - ZipInputStream 转换
- python-3.x - 在任何照明(低或高)下对物体进行图像分割
- maxscript - 如何将数组中的随机旋转值应用于不同的对象
- android - 底部边距导致 RecyclerView 重新排序
- javascript - HTML 列表不会立即更新
- javascript - 如何将 24 小时格式更改为 12 小时?
- angular - Angular:如何在控制台中打印完整的 URL
- c++ - 将 bool 转换为位域中的位
- php - 只有变量应该通过引用传递 - 将 LIMIT 与 bindParam 一起使用时