【问题标题】:sd function returns NA when using group_by() and summarise() in dplyr (no NA values in df)在 dplyr 中使用 group_by() 和 summarise() 时,sd 函数返回 NA(df 中没有 NA 值)
【发布时间】:2020-06-04 17:30:28
【问题描述】:

我有一个带有二进制数字响应变量(0 或 1)和几个响应变量的 df。我正在尝试创建一个按类型(3 级变量)和步骤(7 级)分组的表。我想要每个步骤中每种类型的平均响应和标准偏差。输出表应该有 21 行,包含 4 个变量:type、step、mean 和 sd。

我的代码如下所示:

data <- data %>% group_by(step, type) %>% summarise(Response = mean(Response), dev = sd(Response))  

输出表正确生成平均值,但返回所有 sd 值的 NA。我尝试使用 'na.rm=TRUE' 删除 NA 值,但原始 df 中没有任何响应。有什么想法吗?

【问题讨论】:

  • 如果您只向sd() 输入一个值,它将返回NA。试试sd(1)。做个条件。如果只有一个值,则不计算 sd。

标签: r group-by dplyr summarize


【解决方案1】:

来自?sd

长度为 1 或长度为零的向量的标准差为“NA”。

您的 dplyr 查询可能会导致长度为 1 或长度为 0 的输出。

【讨论】:

    【解决方案2】:

    以下内容应如您所愿:

    data <- data %>% group_by(step, type) %>% summarise(Response_mean = mean(Response), dev = sd(Response))  
    

    如前所述,您获得 NA 的原因是您正在向 sd() 输入单个值。

    但是, 发生的原因与代码中发生的事情的顺序有关。代码中的以下部分:

    summarise(Response = mean(Response)
    

    正在您的新表中创建一个名为“响应”的变量,其中包含一个值 - 原始数据中向量“响应”的平均值。以下部分:

    dev = sd(Response)
    

    尝试计算该单个值的标准差。

    为了说明,你也可以试试这个:

    data <- data %>% group_by(step, type) %>% summarise(Response = mean(Response), Response_plus_10 = Response + 10)  
    

    希望这能澄清问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-15
      • 2018-06-05
      • 1970-01-01
      相关资源
      最近更新 更多