【发布时间】:2021-10-03 15:43:23
【问题描述】:
我有一个玩具 data.frame,它有 4 列(study,outcome,group,time)。比如说,用户想知道在哪些唯一 study 值中,其他任何选定的列值是恒定的还是变化的。
例如,如果用户想知道哪些唯一的study 值、outcome 和group 列值是恒定的还是变化的,那么我们知道可能有 4 种情况:
-
group不变,但outcome变化。 -
outcome不变,但group变化。 -
outcome和group都不同。 -
outcome和group两者都没有变化。
下面的函数foo,正是基于上面的例子。
问题:我想知道如何概括foo,以便用户可以在函数中输入他选择的列的名称(例如outcome和group),以及@987654341 @ 自动检查在哪些唯一 study 值中,任何选定的列是恒定的还是变化的?
ps。在下面的示例中,我的泛化函数将产生如下所示的相同输出。
h = "
study outcome group time
a 1 1 0
a 2 1 1
b 1 1 0
b 1 2 0
c 2 1 0
c 3 2 1
d 1 1 0
d 1 1 0
e 1 1 0"
h = read.table(text=h,h=T)
foo <- function(dat, cond) {
switch(cond,
`1` = dat %>%
group_by(study) %>%
filter(n_distinct(group) == 1, n_distinct(outcome) > 1) %>%
ungroup,
`2` = dat %>%
group_by(study) %>%
filter(n_distinct(group) > 1, n_distinct(outcome) == 1) %>%
ungroup,
`3` = dat %>%
group_by(study) %>%
filter(n_distinct(group) > 1, n_distinct(outcome) > 1) %>%
ungroup,
`4` = dat %>%
group_by(study) %>%
filter(n_distinct(group) == 1, n_distinct(outcome) == 1) %>%
ungroup ) }
#------------------- EXAMPLE OF USE:
> foo(h, 1)
# A tibble: 2 x 3
study outcome group
<chr> <int> <int>
1 a 1 1
2 a 2 1
> foo(h, 2)
# A tibble: 2 x 3
study outcome group
<chr> <int> <int>
1 b 1 1
2 b 1 2
> foo(h, 3)
# A tibble: 2 x 3
study outcome group
<chr> <int> <int>
1 c 2 1
2 c 3 2
> foo(h, 4)
# A tibble: 3 x 3
study outcome group
<chr> <int> <int>
1 d 1 1
2 d 1 1
3 e 1 1
【问题讨论】:
标签: r dataframe function dplyr tidyverse