R - 数据框列中序列中数字的平均值
R - Mean values of numbers in a sequence in a dataframe column
我正在尝试计算在另一列 (x) 中按顺序计数(1、2、3 等)的列 (y) 中的值的平均值。下面显示了一个示例数据框。
> df
x y
1 1 15
2 2 20
3 4 16
4 5 12
5 6 17
6 8 14
7 9 13
8 10 19
我想要一个矢量结果,它会读出数字序列中数字的平均值。所需的向量将显示为:17.5 15 15.33333
我不确定产生此预期结果的最佳方法,但我尝试使用 diff(df[,1])
进行 for 循环以查找断点,但未能成功。
任何人都可以提供任何帮助,我们将不胜感激。这是一个小型示例数据集,但目标是将其应用于大型数据集。
在逻辑向量
上使用cumsum
从diff
创建分组列
with(df, tapply(y, cumsum(c(TRUE, diff(x) != 1)), FUN = mean))
-输出
1 2 3
17.50000 15.00000 15.33333
数据
df <- structure(list(x = c(1L, 2L, 4L, 5L, 6L, 8L, 9L, 10L), y = c(15L,
20L, 16L, 12L, 17L, 14L, 13L, 19L)), class = "data.frame",
row.names = c("1",
"2", "3", "4", "5", "6", "7", "8"))
更新: 代码减少 2 行:
df %>%
group_by(id_Group =cumsum(x-lag(x, default = x[1])>=2)) %>%
summarise(mean = mean(y, na.rm=TRUE)) %>%
pull(mean)
这是一个 dplyr
版本:
- 计算滞后的差值
x
- 创建群组
cumsum(diff>=2)
- 计算均值和
pull
向量。
library(dplyr)
df %>%
mutate(diff= x-lag(x, default = x[1])) %>%
group_by(id_Group =cumsum(diff>=2)) %>%
mutate(mean = mean(y, na.rm=TRUE)) %>%
slice(1) %>%
pull(mean)
[1] 17.50000 15.00000 15.33333
我正在尝试计算在另一列 (x) 中按顺序计数(1、2、3 等)的列 (y) 中的值的平均值。下面显示了一个示例数据框。
> df
x y
1 1 15
2 2 20
3 4 16
4 5 12
5 6 17
6 8 14
7 9 13
8 10 19
我想要一个矢量结果,它会读出数字序列中数字的平均值。所需的向量将显示为:17.5 15 15.33333
我不确定产生此预期结果的最佳方法,但我尝试使用 diff(df[,1])
进行 for 循环以查找断点,但未能成功。
任何人都可以提供任何帮助,我们将不胜感激。这是一个小型示例数据集,但目标是将其应用于大型数据集。
在逻辑向量
上使用cumsum
从diff
创建分组列
with(df, tapply(y, cumsum(c(TRUE, diff(x) != 1)), FUN = mean))
-输出
1 2 3
17.50000 15.00000 15.33333
数据
df <- structure(list(x = c(1L, 2L, 4L, 5L, 6L, 8L, 9L, 10L), y = c(15L,
20L, 16L, 12L, 17L, 14L, 13L, 19L)), class = "data.frame",
row.names = c("1",
"2", "3", "4", "5", "6", "7", "8"))
更新: 代码减少 2 行:
df %>%
group_by(id_Group =cumsum(x-lag(x, default = x[1])>=2)) %>%
summarise(mean = mean(y, na.rm=TRUE)) %>%
pull(mean)
这是一个 dplyr
版本:
- 计算滞后的差值
x
- 创建群组
cumsum(diff>=2)
- 计算均值和
pull
向量。
library(dplyr)
df %>%
mutate(diff= x-lag(x, default = x[1])) %>%
group_by(id_Group =cumsum(diff>=2)) %>%
mutate(mean = mean(y, na.rm=TRUE)) %>%
slice(1) %>%
pull(mean)
[1] 17.50000 15.00000 15.33333