【问题标题】:Nested if and max if statement in R error: unused argumentR错误中的嵌套if和max if语句:未使用的参数
【发布时间】:2021-04-23 02:27:15
【问题描述】:

对 R 来说还是很新的东西,我想在另一个变量为正/负时确定组内变量的最大值。具体来说,if l_diff<0,我想在pos_n<0的时候找到每组t的最大值。如果l_diff>0,我想在pos_p>0时找到每个组中t的最大值。示例数据:

l_diff <- c(-1,-1,-1,-1,-1,-1,1,1,1,1,1)
pos_n <- c(2,2,1,-4,-2,-2,2,1,-5,4,8)
pos_p <- c(3,4,-5,6,-7,2,-3,3,2,1,4)
t <- c(5,7,3,1,6,2,7,5,3,2,1)
group <- c(1,1,1,1,1,1,2,2,2,2,2)
db <- data.frame(cbind(l_diff,pos_n, pos_p, t, group))

期望的输出:

cmax<- c(6,6,6,6,6,6,5,5,5,5,5)

我尝试了以下方法:

db<-db %>%
  group_by((group)) %>%
  mutate(ifelse(l_diff<0, t1 = max(t[pos_n<0], ifelse(l_diff>0, t1 = max(t[pos_p >0])))))

但我收到以下错误:

错误:mutate() 输入 ..1 有问题。 x 未使用的参数(t1 = max(t[pos_n 0, t1 = max(t[pos_p > 0])))) 我 输入..1ifelse(...)。 i 组 1 中发生的错误:(组) = 1。

知道可能出了什么问题或有其他建议吗?

【问题讨论】:

  • t1 = 应该在外面,你需要nooutput

标签: r if-statement max maxifs


【解决方案1】:

对于ifelse,我们需要将赋值放在外面,同样,ifelse 用法中的所有参数都必须存在

ifelse(测试,是,否)

在这里,在嵌套的第二个 ifelse 中找不到 no。如果我们默认使用case_when 作为TRUE ~ NA,这不是问题

library(dplyr)
db %>%
   group_by(group) %>%
   mutate(t1  = ifelse(l_diff<0,  max(t[pos_n<0]), 
                ifelse(l_diff>0,max(t[pos_p >0]), NA))) %>%
   ungroup

-输出

# A tibble: 11 x 6
#   l_diff pos_n pos_p     t group    t1
#    <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
# 1     -1     2     3     5     1     6
# 2     -1     2     4     7     1     6
# 3     -1     1    -5     3     1     6
# 4     -1    -4     6     1     1     6
# 5     -1    -2    -7     6     1     6
# 6     -1    -2     2     2     1     6
# 7      1     2    -3     7     2     5
# 8      1     1     3     5     2     5
# 9      1    -5     2     3     2     5
#10      1     4     1     2     2     5
#11      1     8     4     1     2     5

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-15
    相关资源
    最近更新 更多