【问题标题】:Is there an R function to fill NA value of a column in a specific way?是否有 R 函数以特定方式填充列的 NA 值?
【发布时间】:2019-02-06 09:23:29
【问题描述】:

所以我有一个这样的数据框:

我希望所有且只有我拥有的缺失值 (NA) 被以下公式替换:Value1 / Value2

我知道如何使用循环来执行此操作,但是当涉及到大规模数据帧时,它需要时间,所以我想知道是否有任何功能/提示可以更快地给我预期的结果

【问题讨论】:

标签: r dataframe


【解决方案1】:

不是直接功能,但类似这样的功能会起作用

#Get indices for NA non-zero values
inds1 <- is.na(df$Result) & df$Value2 != 0
#Get indices for NA zero values
inds2 <- is.na(df$Result) & df$Value2 == 0

#Replace them
df$Result[inds1] <- df$Value1[inds1]/df$Value2[inds1]
df$Result[inds2] <- 0

【讨论】:

  • 谢谢它工作得很好,但是是否可以添加一个条件并说当 value2 等于 0 时我的结果是 0 ?
  • @Arkning 您可以通过 df$Result[df$Value2 == 0] &lt;- 0 替换所有 Value2 == 0Result
  • 我想过这一点,但我只想在开始时只为 NAs 值这样做,因为我可能有一行我有 Value2 = 0 但我的结果已经是一个值而我没有不想改变它
  • 然后我可以做类似 df$Result[df$Value2[inds] == 0]
【解决方案2】:

非常适合tidyverse

library(tidyverse)
d %>% 
  mutate(Result = ifelse(is.na(Result), Value1/Value2, Result)))

d %>% 
  mutate(Result = case_when(is.na(Result) & Value2 == 0 ~ Value2, 
                            is.na(Result) ~ Value1/Value2, 
                            TRUE ~ Result))

【讨论】:

    猜你喜欢
    • 2021-10-18
    • 2021-12-12
    • 2021-12-15
    • 2016-11-21
    • 2021-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多