【发布时间】:2021-10-04 15:20:30
【问题描述】:
我正在跟进this great answer。在that answer 中,foo 函数帮助用户了解其他两个选定列(group&outcome)中的哪个唯一study 值是常量 或 变化。在这种情况下,可能有 4 种情况 (2^2):
-
group不变,但outcome变化。 -
outcome不变,但group变化。 -
outcome和group都不同。 -
outcome和group两者都没有变化。
下面的函数 foo2 用于为 study 提取满足上述 4 种可能性的行。
在这个后续中,我想知道我们是否可以通过添加一个... 参数来扩展foo2 函数,以便用户可以输入一个或多个var_col(例如,var1_col、var2_col、...),然后函数会提取可能的情况(number of variable^2 情况)?
例如,在我下面的数据中,我有 4 选定的列 (sample,group,outcome,control),因此 8 可能存在的情况可以通过以下方式从该数据中提取一个新功能。
我知道如果用户添加多个变量,number of variable^2 会迅速增加,因此我想将 foo2 函数扩展到更多变量。
h = "
case sample group outcome control
1 1 1 1 1 1
2 1 2 1 1 1
3 1 1 2 1 1
4 1 2 2 1 1
5 1 1 1 2 1
6 1 2 1 2 1
7 1 1 2 2 1
8 1 2 2 2 1
9 2 1 1 1 1
10 2 1 2 1 1
11 2 1 1 2 1
12 2 1 2 2 1
13 3 1 1 1 1
14 3 2 1 1 1
15 3 1 1 2 1
16 3 2 1 2 1
17 4 1 1 1 1
18 4 2 1 1 1
19 4 1 2 1 1
20 4 2 2 1 1
21 5 1 1 1 1
22 5 1 2 1 1
23 6 1 1 1 1
24 6 1 2 1 1
25 7 1 1 1 1
26 7 2 1 1 1
27 8 1 1 1 1
28 9 1 1 1 1
29 9 2 1 1 1
30 9 1 2 1 1
31 9 2 2 1 1
32 9 1 1 2 1
33 9 2 1 2 1
34 9 1 2 2 1
35 9 2 2 2 1
36 9 1 1 1 2
37 9 2 1 1 2
38 9 1 2 1 2
39 9 2 2 1 2
40 9 1 1 2 2
41 9 2 1 2 2
42 9 1 2 2 2
43 9 2 2 2 2
44 10 1 1 1 1
45 10 1 2 1 1
46 10 1 1 2 1
47 10 1 2 2 1
48 10 1 1 1 2
49 10 1 2 1 2
50 10 1 1 2 2
51 10 1 2 2 2
52 11 1 1 1 1
53 11 2 1 1 1
54 11 1 1 2 1
55 11 2 1 2 1
56 11 1 1 1 2
57 11 2 1 1 2
58 11 1 1 2 2
59 11 2 1 2 2
60 12 1 1 1 1
61 12 2 1 1 1
62 12 1 2 1 1
63 12 2 2 1 1
64 12 1 1 1 2
65 12 2 1 1 2
66 12 1 2 1 2
67 12 2 2 1 2
68 13 1 1 1 1
69 13 1 2 1 1
70 13 1 1 1 2
71 13 1 2 1 2
72 14 1 1 1 1
73 14 1 2 1 1
74 14 1 1 1 2
75 14 1 2 1 2
76 15 1 1 1 1
77 15 2 1 1 1
78 15 1 1 1 2
79 15 2 1 1 2
80 16 1 1 1 1
81 16 1 1 1 2"
h = read.table(text=h,h=T)
foo2 <- function(dat, study_col, group_col, outcome_col) {
dat %>%
dplyr::select({{study_col}}, {{group_col}}, {{outcome_col}}) %>%
dplyr::group_by({{study_col}}) %>%
dplyr::mutate(grp = stringr::str_c(n_distinct({{group_col}}) == 1,
n_distinct({{outcome_col}}) == 1 )) %>%
dplyr::ungroup(.) %>%
dplyr::group_split(grp, .keep = FALSE) }
【问题讨论】:
标签: r dataframe function dplyr tidyverse