【问题标题】:Calculating each factor level's sd() for a variable计算变量的每个因子水平的 sd()
【发布时间】:2020-10-31 21:27:08
【问题描述】:

我的合著者要求我将sd 添加到具有两个以上级别的因子变量中,sd(as.numeric(df$factor)) 给我一个输出而不是每个输出的 sd。我想purrr::map 可以处理它,但 df%>% select(factor) %>% as.numeric %>% map(~(sd(.))) 输出错误Error in function_list[[i]](value) : 'list' object cannot be coerced to type 'double' 即使 df 不是列表。

【问题讨论】:

  • sd for each 表示每一列? sd 将为列返回单个值,如果您需要为每个级别获取 sd。那么你需要df %>% group_by(factor) %>% summarise(SD = sd(yourcolumn))
  • 您没有指定上下文,但我认为您应该小心使用分类变量的 sd。例如:取像c(1,2,1,1,3,2,3,3,1)这样的变量的sd是没有意义的,其中1代表蓝色,2红色和3绿色,没有基础尺度让你看到“2(红色)是两倍多达 1 个(蓝色)”。
  • 请使用dput 或我们可以复制和使用的东西添加数据。还显示共享数据的预期输出。了解how to ask a good question 和how to give a reproducible example。

标签: r purrr standard-deviation factors levels


【解决方案1】:

如果是factor 列的每个level 的sd,我们需要将其用作分组变量

library(dplyr)
df %>%
    group_by(factor) %>%
     summarise(SD = sd(anothercolumn, na.rm = TRUE))

根据描述,如果我们需要factor中的sd变量有两个以上的层次

df %>%
     summarise(across(where(~ is.factor(.) && nlevels(.) >2),
         ~ sd(as.numeric(.))))

【讨论】:

    猜你喜欢
    • 2021-12-15
    • 1970-01-01
    • 2019-01-22
    • 2021-08-26
    • 1970-01-01
    • 2015-10-04
    • 2013-10-08
    • 2017-05-23
    • 1970-01-01
    相关资源
    最近更新 更多