【问题标题】:Standard deviation based on group id from a data frame基于来自数据帧的组 id 的标准差
【发布时间】:2021-06-18 04:44:17
【问题描述】:

这与您之前的问题之一有关。我的最终目标是根据序列变量对项目进行排名,序列变量来自一天开始和结束的标准偏差值。简单总结一下,我想计算它们(开始日和结束日),然后如果标准偏差小于 0.5,我想用 1 标记它。在 R 中执行此操作的最佳方法是什么?

我想在 R 中实现的规则:

=IF(AND(STDEV.S(D2,D3,D4)<0.5,STDEV.P(E2, E3, E4)<0.5),1,0)

示例数据结构:

样本输出:

样本数据

df<-structure(list(serial = c(11011209, 11011209, 11011209, 11011209, 
11011209, 11011210, 11011210, 11011210, 11011210), pnum = c(1, 
1, 1, 2, 2, 2, 2, 2, 2), Day = c("Tue", "Wed", "Thur", "Wed", 
"Thur", "Mo", "Tue", "Wed", "Thur"), Start = c(7, 7, 7, 8, 8, 
9.75, 6.5, 6.5, 6.5), End = c(14.5, 14.5, 14.5, 15.75, 15.75, 
17.75, 14.75, 14.75, 8.75)), class = c("spec_tbl_df", "tbl_df", 
"tbl", "data.frame"), row.names = c(NA, -9L), spec = structure(list(
    cols = list(serial = structure(list(), class = c("collector_double", 
    "collector")), pnum = structure(list(), class = c("collector_double", 
    "collector")), Day = structure(list(), class = c("collector_character", 
    "collector")), Start = structure(list(), class = c("collector_double", 
    "collector")), End = structure(list(), class = c("collector_double", 
    "collector"))), default = structure(list(), class = c("collector_guess", 
    "collector")), skip = 1L), class = "col_spec"))

【问题讨论】:

    标签: r dataframe


    【解决方案1】:

    按'serial'、'num'分组后,创建'Pattern',通过检查'Start'、'End'列的sd小于0.5并用@连接多个表达式987654322@

    library(dplyr)
    df %>%
        group_by(serial, pnum) %>% 
        mutate(Pattern = +(sd(Start) < 0.5 & sd(End) < 0.5)) %>%
        ungroup
    

    或者不是单独指定每一列,而是使用if_all

    df %>%
        group_by(serial, pnum) %>%
        mutate(Pattern = +(if_all(c(Start, End), ~ sd(.) < 0.5))) %>%
        ungroup
    

    【讨论】:

      猜你喜欢
      • 2021-04-25
      • 2014-09-28
      • 2023-03-08
      • 2021-08-07
      • 2021-06-14
      • 1970-01-01
      • 2014-01-20
      • 2021-12-01
      • 2015-06-19
      相关资源
      最近更新 更多