首页 > 解决方案 > 使用 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,依此类推......

标签: rdataframesubsetna

解决方案


rleid我们可以使用from创建连续值data.table组,在每组中计算meanY/

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))

推荐阅读