我正在嘗試計算列 (y) 中的值的平均值,這些值在另一列 (x) 中按順序計數(1、2、3 等)。下面顯示了一個示例資料框。
> 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
我不確定產生這種預期結果的最佳方法,但我嘗試過使用 for 回圈diff(df[,1])來查找斷點,但未能成功。
任何人都可以提供任何幫助將不勝感激。這是一個小型示例資料集,但目標是將其應用于大型資料集。
uj5u.com熱心網友回復:
diff從使用cumsum邏輯向量創建分組列
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"))
uj5u.com熱心網友回復:
更新:代碼減少了 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
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/462263.html
下一篇:根據其他列向我的資料框添加一列
