假设我有以下数据集:
data.frame(country = c("A", "A", "B", "B", "C", "C"),
type = c("x", "z", "x", "z", "x", "z"),
value = c(4, 2, 6, 10, 54, 10))
country type value
1 A x 4
2 A z 2
3 B x 6
4 B z 10
5 C x 54
6 C z 10
我想要做的是为每个国家/地区(A、B、C)创建多个新行,其中包含一个名为“z-x”的新类型和一个新值,该新值是值 z 和 x 之间的差值。我正在寻找这个输出:
data.frame(country = c("A", "A", "A", "B", "B", "B", "C", "C", "C"),
type = c("x", "z", "z-x", "x", "z", "z-x", "x", "z", "z-x"),
value = c(4, 2, -2, 6, 10, 4, 54, 10, -44))
country type value
1 A x 4
2 A z 2
3 A z-x -2
4 B x 6
5 B z 10
6 B z-x 4
7 C x 54
8 C z 10
9 C z-x -44
这假设您的数据已经排序,以便(在每个国家/地区内)
x
位于 z
之前。
df |>
summarize(type = "z - x",
value = diff(value),
.by = country) |>
bind_rows(df) |>
arrange(country, type)
# country type value
# 1 A x 4
# 2 A z 2
# 3 A z - x -2
# 4 B x 6
# 5 B z 10
# 6 B z - x 4
# 7 C x 54
# 8 C z 10
# 9 C z - x -44
如果您希望更明确,这可以解决问题:
df |>
summarize(
value = value[type == "z"] - value[type == "x"],
type = "z - x",
.by = country) |>
bind_rows(df) |>
arrange(country, type)