【问题标题】:Return NAs instead of Inf when arguments of function are missing当函数的参数丢失时返回 NAs 而不是 Inf
【发布时间】:2020-07-10 10:45:26
【问题描述】:

我想在另一列有条件地向数据框添加一列。

这是一个例子。我有一个简单的数据框

library(tidyverse)
set.seed(123)

df <- data.frame(time = seq(1,5,1), 
                 x = seq(1,5,1) + rnorm(n=5, sd=0.3))

> df
  time         x
1    1 0.8318573
2    2 1.9309468
3    3 3.4676125
4    4 4.0211525
5    5 5.0387863

我想将x 超过特定值(例如x &gt; 4)的time 添加到名为border_value 的新列中。

以下代码确实有效:

df <- df %>% mutate(border_value = min(.[.$x > 4, "time"]))

> df
  time         x border_value
1    1 0.8318573            4
2    2 1.9309468            4
3    3 3.4676125            4
4    4 4.0211525            4
5    5 5.0387863            4

问题

我有很多数据框,其中x 的值不同。有时,这些值不会超过x&gt;4border_value。在这些情况下,R 会产生错误:

警告消息:在 min(.[.$x > 4, "time"]) 中:没有非缺失参数 至分钟;返回Inf

我想更改我的代码,以免发生此错误,而 R 将 NA 放在列中。知道怎么做吗?

更新

基于this 帖子,我能够将代码重写为:

df <- df %>% 
   mutate(border_value = ifelse(test = is.infinite(min(.[.$x > 7, "time"])), yes = NA, no = min(.[.$x > 4, "time"])))

这不会生成Infs,但仍然会生成错误...

【问题讨论】:

    标签: r dataframe dplyr


    【解决方案1】:

    您可以通过多种方式编写它。以下是基于您的用例的一对,

    df %>% mutate(border_value = which(x > 4)[1])
    df %>% mutate(border_value = time[x > 4][1])
    

    如果没有找到值,两者都将返回 NA

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-18
      • 2014-03-14
      • 2020-07-02
      • 2021-03-06
      • 2021-04-09
      相关资源
      最近更新 更多