使用 dplyr::case_when 时右手按行 min()
Row-wise min() on right hand when using dplyr::case_when
我试图在 R 中的条件 dplyr::case_when 语句中获取一次观察中的一个变量和固定数字中较小的一个。但是 min() 语句与整个变量向量的最小观察值进行比较,即不是针对每个观察结果。
library(tidyverse)
data_frame(spc = rep(c("cat", "dog"), 3), z = 1:6) %>%
mutate(
dogsmax3 = case_when(
spc == "dog" ~ min(z, 3),
TRUE ~ 0))
# spc z dogsmax3
# <chr> <int> <dbl>
#1 cat 1 0
#2 dog 2 1
#3 cat 3 0
#4 dog 4 1
#5 cat 5 0
#6 dog 6 1
当我寻找产生这个结果的声明时:
# spc z dogsmax3
# <chr> <int> <dbl>
#1 cat 1 0
#2 dog 2 2
#3 cat 3 0
#4 dog 4 3
#5 cat 5 0
#6 dog 6 3
那么,有什么更好的建议吗?
使用rowwise
。除了 case_when
你还可以使用 ifelse
:
library(tidyverse)
data_frame(spc = rep(c("cat", "dog"), 3), z = 1:6) %>%
rowwise() %>%
mutate(dogsmax3 = ifelse(spc == "dog", min(z,3), 0)) %>%
ungroup() ## to revert the grouping by rows
您可以使用 ?pmin
而不是 min
-
data_frame(spc = rep(c("cat", "dog"), 3), z = 1:6) %>%
mutate(
dogsmax3 = case_when(
spc == "dog" ~ pmin(z, 3),
TRUE ~ 0)
)
# A tibble: 6 x 3
spc z dogsmax3
<chr> <int> <dbl>
1 cat 1 0
2 dog 2 2.00
3 cat 3 0
4 dog 4 3.00
5 cat 5 0
6 dog 6 3.00
我试图在 R 中的条件 dplyr::case_when 语句中获取一次观察中的一个变量和固定数字中较小的一个。但是 min() 语句与整个变量向量的最小观察值进行比较,即不是针对每个观察结果。
library(tidyverse)
data_frame(spc = rep(c("cat", "dog"), 3), z = 1:6) %>%
mutate(
dogsmax3 = case_when(
spc == "dog" ~ min(z, 3),
TRUE ~ 0))
# spc z dogsmax3
# <chr> <int> <dbl>
#1 cat 1 0
#2 dog 2 1
#3 cat 3 0
#4 dog 4 1
#5 cat 5 0
#6 dog 6 1
当我寻找产生这个结果的声明时:
# spc z dogsmax3
# <chr> <int> <dbl>
#1 cat 1 0
#2 dog 2 2
#3 cat 3 0
#4 dog 4 3
#5 cat 5 0
#6 dog 6 3
那么,有什么更好的建议吗?
使用rowwise
。除了 case_when
你还可以使用 ifelse
:
library(tidyverse)
data_frame(spc = rep(c("cat", "dog"), 3), z = 1:6) %>%
rowwise() %>%
mutate(dogsmax3 = ifelse(spc == "dog", min(z,3), 0)) %>%
ungroup() ## to revert the grouping by rows
您可以使用 ?pmin
而不是 min
-
data_frame(spc = rep(c("cat", "dog"), 3), z = 1:6) %>%
mutate(
dogsmax3 = case_when(
spc == "dog" ~ pmin(z, 3),
TRUE ~ 0)
)
# A tibble: 6 x 3
spc z dogsmax3
<chr> <int> <dbl>
1 cat 1 0
2 dog 2 2.00
3 cat 3 0
4 dog 4 3.00
5 cat 5 0
6 dog 6 3.00