r - 使用 R,如何将连续值与项目 NA 的数据帧分开并计算仅变量 Y 的平均值?
问题描述
X Y
1 1 2
2 2 4
3 NA NA
4 NA NA
5 NA NA
6 NA NA
7 1 4
8 2 6
9 1 8
10 1 10
应该是这样:在第一种情况下,值 2 和 4 的平均值是 3 在第二种情况下,值 4、6、8、10 的平均值是 7,依此类推......
解决方案
rleid
我们可以使用from创建连续值data.table
组,在每组中计算mean
值Y
/
library(dplyr)
df %>%
group_by(gr = data.table::rleid(is.na(Y))) %>%
summarise(Y = mean(Y, na.rm = TRUE)) %>%
filter(!is.na(Y)) -> df1
df1
# gr Y
# <int> <dbl>
#1 1 3
#2 3 7
data.table
这样做的方法是:
library(data.table)
df1 <- setDT(df)[, .(Y = mean(Y, na.rm = TRUE)), rleid(is.na(Y))][!is.na(Y)]
数据
df <- structure(list(X = c(1L, 2L, NA, NA, NA, NA, 1L, 2L, 1L, 1L),
Y = c(2L, 4L, NA, NA, NA, NA, 4L, 6L, 8L, 10L)),
class = "data.frame", row.names = c(NA, -10L))
推荐阅读
- python - 错误“OSError:告诉位置被 next() 调用禁用”
- python-3.x - Django Python POST方法不写入数据库
- python - ValueError:无法将字符串转换为浮点数:Sklearn 和 pandas 中的错误
- javascript - 如何使用一个组件来渲染一组值
- android - Xamarin Forms Designer 需要在地图顶部并排放置 2 个按钮
- excel - 如何加入单词“Sheet”和整数以形成工作表代号
- c - 在不使用 strtok 的情况下返回 c 中的剩余字符串
- java - 如何从 Spotify API 获取访问令牌?[爪哇]
- laravel - Laravel 7 - Eloquent ORM 在使用一对一关系时从 2 个表中获取数据
- android - ViewPager2:监听 setCurrentItem() 完成