【问题标题】:How to input average values calculated from specific non NA value columns into existing average column如何将从特定的非 NA 值列计算的平均值输入到现有的平均值列中
【发布时间】:2021-05-20 20:16:04
【问题描述】:

![文字]Dataframe being used

请查看数据帧图像的链接。我正在尝试计算缺少 TempAvg 值的行的平均温度。有些行有 TempMin 和 TempMax,因此可以使用它来计算平均温度。话虽如此,我需要使用该函数为 TempAvg 尚不存在并且将是 NA 值的行计算 TempAvg。我冒着为 TempAvg 列中已经存在的值计算新的 TempAvg 值的风险。我曾尝试讨论 for 循环,但在继续阅读后发现这不是最佳选择。当数据框包含 1300 万行时,如何解决这个问题。只是为了澄清一下,我想保留尽可能多的行,因为检查 TempAvg 不是 NA 的行仅显示 250 万行,这意味着如果我删除具有 NA 值的 TempMin 和 Max 列,则会丢失大量数据

sum(!is.na(Avg))
[1] 2535882

【问题讨论】:

标签: r dataframe mean


【解决方案1】:

听起来你可以用case_when 语句解决这个问题。比如:

library(tidyverse)

df %>%
  mutate(TempAvg = case_when(
    !is.na(TempAvg) ~ TempAvg,
    TRUE ~ (TempMax + TempMin) / 2
  ))

使用该代码,您的意思是“创建一个名为 TempAvg 的列,并在其中不为 NA 的地方填充现有的 TempAvg 值,否则使用 TempMax 和 TempMin 之间的平均值填充”

【讨论】:

  • Error: Problem with mutate()` 输入TempAvg。 x 必须是整数向量,而不是双向量`我一直遇到这个代码问题
  • 尝试删除第一个 case_when 它似乎对某些行有效,而其他行则完全删除了 TempAvg
  • 听起来你的专栏可能不是同一个类?您可以通过在您的案例陈述之前执行以下操作来强制他们全部成为:mutate(across(c("TempAvg", "TempMax", "TempMin"), as.numeric))
【解决方案2】:

经过反复试验,解决方案需要一个简单的修复

Weather2021 <- Weather2021 %>%
    mutate(TempAvg = case_when(
    !is.na(TempAvg) ~ as.numeric(TempAvg),
    !is.na(TempMax) & !is.na(TempMin) ~ (TempMax + TempMin) / 2))

as.numeric 转换看似关键

【讨论】:

    猜你喜欢
    • 2020-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-12
    • 2011-03-08
    • 1970-01-01
    相关资源
    最近更新 更多