繁体   English   中英

根据R中另一列的值得到一个值 - dplyr

[英]Get a value based on the value of another column in R - dplyr

我得到了这个 df:

df <- data.frame(month = c(1,1,1,1,1,2,2,2,2,2,3,3,3,3,3,4,4,4,4,4),
                 day   = c(1,2,3,4,5,1,2,3,4,5,1,2,3,4,5,1,2,3,4,5),
                 flow  = c(2,5,7,8,5,4,6,7,9,2,NA,1,6,10,2,NA,NA,NA,NA,NA))

我想达到这个结果:

   month   day  flow   dayofminflow
 1     1     1     2     1
 2     1     2     5     1
 3     1     3     7     1
 4     1     4     8     1
 5     1     5     5     1
 6     2     1     4     5
 7     2     2     6     5
 8     2     3     7     5
 9     2     4     9     5
10     2     5     2     5
11     3     1    NA     2
12     3     2     1     2
13     3     3     6     2
14     3     4    10     2
15     3     5     2     2
16     4     1    NA    NA
17     4     2    NA    NA
18     4     3    NA    NA
19     4     4    NA    NA
20     4     5    NA    NA

我正在使用这个解决方案,但当第一个值为 NA 时它返回 NA:

newdf <- df %>% group_by(month) %>% mutate(Val=day[flow==min(flow)][1])

当所有数据均为 NA 时,此解决方案会返回错误:

library(dplyr)
df <- df %>%
       group_by(month) %>% 
       mutate(dayminflowofthemonth = day[which.min(flow)]) %>%
       ungroup

您只需更改第一个解决方案中min()中的默认na.rm = TRUE即可忽略 NA 吗?

df %>% 
    group_by(month) %>% 
    mutate(dayofminflow = day[which(min(flow, na.rm = TRUE) == flow)][1])

# A tibble: 20 x 4
# Groups:   month [4]
   month   day  flow dayofminflow
   <dbl> <dbl> <dbl>        <dbl>
 1     1     1     2            1
 2     1     2     5            1
 3     1     3     7            1
 4     1     4     8            1
 5     1     5     5            1
 6     2     1     4            5
 7     2     2     6            5
 8     2     3     7            5
 9     2     4     9            5
10     2     5     2            5
11     3     1    NA            2
12     3     2     1            2
13     3     3     6            2
14     3     4    10            2
15     3     5     2            2
16     4     1    NA           NA
17     4     2    NA           NA
18     4     3    NA           NA
19     4     4    NA           NA
20     4     5    NA           NA

尽管您收到警告no non-missing arguments to min; returning Inf 从第4个月开始no non-missing arguments to min; returning Inf ,因为所有流量值都是 NA。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM