【问题标题】:Grouping observations and calculating Z scores [duplicate]分组观察和计算Z分数[重复]
【发布时间】:2020-12-05 13:34:43
【问题描述】:

我目前正在研究气候数据集,有两个主要问题我无法解决。

R = https://ufile.io/xnvy4coh

数据 = https://ufile.io/u2dszh4x

  1. 有没有办法在对应的列之前融化季节字段,使其产生类似https://imgur.com/dF3gNY0 我想在季节列中生成一个名为“grow”的新类,其中包含 ppt 和春季和夏季月份的所有其他参数的平均值。我最初试图将 prism_grouped 与一年的列和其他列和个人观察,即(spring_ppt_mm,summer_ppt_mm,fall_ppt_mm,winter_ppt_mm,...)并使用 mutate 从那里计算它,但融化和收集数据总是让我很不稳定结果。

  2. 当我尝试计算每个赛季的 z 分数时,当我使用这种方法时,我会在输出数据库中填充 NaN:

    弹簧 %

    过滤器(季节==“春天”)%>%

    变异(z_ppt_mm = scale(ppt_mm)) %>%

    变异(z_tmin_c = scale(tmin_c)) %>%

    变异(z_tmean_c = scale(tmean_c)) %>%

    变异(z_tmax_c = scale(tmax_c)) %>%

    变异(z_vdpmin_hpa = scale(vdpmin_hpa)) %>%

    变异(z_vdpmax_hpa = scale(vdpmax_hpa))

但如果我执行以下操作会得到有效结果:

spring <- filter(prism_grouped,season == "spring")
z_spr_ppt <- scale(spring$ppt_mm)
z_spr_tmin <- scale(spring$tmin_c)
z_spr_tmean <- scale(spring$tmean_c)
z_spr_tmax <- scale(spring$tmax_c)
z_spr_vdpmin <- scale(spring$vdpmin_hpa)
z_spr_vdpmax <- scale(spring$vdpmax_hpa)

我目前可以使用第二种方法,但我正在尝试减少我正在使用的变量的数量,并且希望将它们包含在数据框中。任何建议将不胜感激!

【问题讨论】:

    标签: r dplyr


    【解决方案1】:

    我不明白第一个问题,但对于第二个问题,您可以使用 across(或旧 mutate_at 中的 mutate_at)将相同的功能应用于多个列。类似的东西:

    library(dplyr)
    
    spring <- prism_grouped %>%
      ungroup %>%
      filter(season == "spring") %>%
      mutate(across(ppt_mm:vdpmax_hpa, ~as.numeric(scale(.)), .names = 'z_{col}'))
    

    【讨论】:

    • 很高兴知道谢谢!从该 sn-p 得出的结果仍然产生 NaN。对于我的第一个问题,我只想根据春季和夏季的值计算一个新的“增长”值。我的第一个方法是尝试将数据融合到每个季节后面跟着参数名称(即 spring_ppt_mm),但没有成功。我认为对于具有这种格式的每一列,我都可以 mutate(grow_ppt_mm, sum(spring_ppt_mm + summer_ppt_mm) 这有意义吗?
    • 对于您共享的数据,它按预期工作(没有NA/NaNs)。你能重新启动R再试一次吗?
    • 我尝试重新启动它,但仍然得到相同的错误:脚本:ufile.io/l8hsao2b 来源:ufile.io/3ix162h9
    • 我无法复制它。检查列的类别。 sapply(prism_grouped, class) 返回什么?除了前 2 列之外,所有列都是数字吗?
    • 您用于创建prism_grouped 变量的代码存在问题。如果您使用 spring &lt;- prism %&gt;% filter(season == "spring") %&gt;% mutate(across(ppt_mm:vdpmax_hpa, scale, .names = 'z_{col}')) 它不会给出任何 NA 值。您的数据分组在prism_grouped 中。请参阅更新的答案。请确保显示您正在运行的确切代码。
    猜你喜欢
    • 1970-01-01
    • 2016-02-17
    • 1970-01-01
    • 2019-06-24
    • 2017-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多