3。更新: 使用dplyr 1.0.4: if_any() and if_all()
data %>%
mutate(
carac_all = case_when(
if_all(contains("carac"), ~. < 1) ~ "Always no",
if_any(contains("carac"), ~. >= 1) ~ "yes at least one time",
TRUE ~ NA_character_))
2。更新: 感谢 Martin Gal 的宝贵意见:
data %>%
mutate(carac_all = case_when(
rowSums(across(carac1:carac3)) < 1 ~ "Always no",
rowSums(across(carac1:carac3)) >=1 ~ "yes at least one time",
TRUE ~ NA_character_))
更新:澄清后:
data %>%
mutate(sum_carac = carac1+carac2+carac3) %>%
mutate(carac_all = case_when(
sum_carac < 1 ~ "Always no",
sum_carac >=1 ~ "yes at least one time",
TRUE ~ NA_character_)) %>%
select(-sum_carac)
carac1 carac2 carac3 carac_all
1 0 1 0 yes at least one time
2 0 0 0 Always no
3 1 0 1 yes at least one time
4 1 1 0 yes at least one time
5 0 1 0 yes at least one time
6 1 0 1 yes at least one time
7 1 0 1 yes at least one time
8 1 0 0 yes at least one time
9 1 1 0 yes at least one time
10 0 1 1 yes at least one time
11 0 1 1 yes at least one time
12 0 1 0 yes at least one time
13 1 0 1 yes at least one time
14 0 0 1 yes at least one time
15 1 0 1 yes at least one time
16 0 0 0 Always no
17 1 1 1 yes at least one time
18 1 0 1 yes at least one time
19 0 0 1 yes at least one time
20 1 1 0 yes at least one time
21 1 1 0 yes at least one time
22 0 0 0 Always no
23 1 0 0 yes at least one time
24 0 0 1 yes at least one time
25 0 1 1 yes at least one time
26 0 0 1 yes at least one time
27 0 1 0 yes at least one time
28 0 0 0 Always no
29 1 0 0 yes at least one time
30 0 1 1 yes at least one time
31 0 1 0 yes at least one time
32 1 0 0 yes at least one time
33 0 0 0 Always no
34 0 1 1 yes at least one time
35 1 1 0 yes at least one time
36 1 1 1 yes at least one time
37 1 1 1 yes at least one time
38 0 1 1 yes at least one time
39 1 1 0 yes at least one time
40 0 1 0 yes at least one time
41 1 1 0 yes at least one time
42 1 1 1 yes at least one time
43 1 0 1 yes at least one time
44 1 0 0 yes at least one time
45 1 1 0 yes at least one time
46 1 0 0 yes at least one time
47 0 0 0 Always no
48 0 1 0 yes at least one time
49 1 0 0 yes at least one time
50 1 1 1 yes at least one time
51 0 1 1 yes at least one time
52 1 1 1 yes at least one time
53 0 0 0 Always no
54 0 0 1 yes at least one time
55 0 1 0 yes at least one time
56 0 0 0 Always no
57 0 1 0 yes at least one time
58 1 0 0 yes at least one time
59 1 0 0 yes at least one time
60 0 0 1 yes at least one time
61 1 0 1 yes at least one time
62 0 1 0 yes at least one time
63 0 0 0 Always no
64 0 1 1 yes at least one time
65 1 1 1 yes at least one time
66 0 0 0 Always no
67 0 0 0 Always no
68 1 0 1 yes at least one time
69 0 1 1 yes at least one time
70 1 0 0 yes at least one time
71 0 1 0 yes at least one time
72 1 1 0 yes at least one time
73 0 1 0 yes at least one time
74 0 0 0 Always no
75 0 0 0 Always no
76 1 1 0 yes at least one time
77 1 1 0 yes at least one time
78 0 1 0 yes at least one time
79 1 1 0 yes at least one time
80 1 1 1 yes at least one time
81 0 0 0 Always no
82 1 0 1 yes at least one time
83 0 1 1 yes at least one time
84 0 1 0 yes at least one time
85 1 1 0 yes at least one time
86 0 0 0 Always no
87 1 1 0 yes at least one time
88 0 1 0 yes at least one time
89 0 1 0 yes at least one time
90 0 1 0 yes at least one time
91 0 1 0 yes at least one time
92 0 0 0 Always no
93 1 0 1 yes at least one time
94 1 1 0 yes at least one time
95 1 0 1 yes at least one time
96 1 1 1 yes at least one time
97 0 0 0 Always no
98 0 1 0 yes at least one time
99 1 0 0 yes at least one time
100 1 1 1 yes at least one time
第一个答案:
我们可以使用来自dplyr 包的across
library(dplyr)
data %>%
mutate(across(starts_with("carac"), ~case_when(
. == 0 ~ "Always no",
. == 1 ~ "yes at least one time",
TRUE ~ NA_character_), .names ="x_{.col}")) %>%
select(carac1:x_carac1)
carac1 carac2 carac3 carac_all
1 0 1 0 yes at least one time
2 0 0 0 Always no
3 1 0 1 yes at least one time
4 1 1 0 yes at least one time
5 0 1 0 yes at least one time
6 1 0 1 yes at least one time
7 1 0 1 yes at least one time
8 1 0 0 yes at least one time
9 1 1 0 yes at least one time
10 0 1 1 yes at least one time
11 0 1 1 yes at least one time
12 0 1 0 yes at least one time
13 1 0 1 yes at least one time
14 0 0 1 yes at least one time
15 1 0 1 yes at least one time
16 0 0 0 Always no
17 1 1 1 yes at least one time
18 1 0 1 yes at least one time
19 0 0 1 yes at least one time
20 1 1 0 yes at least one time
21 1 1 0 yes at least one time
22 0 0 0 Always no
23 1 0 0 yes at least one time
24 0 0 1 yes at least one time
25 0 1 1 yes at least one time
26 0 0 1 yes at least one time
27 0 1 0 yes at least one time
28 0 0 0 Always no
29 1 0 0 yes at least one time
30 0 1 1 yes at least one time
31 0 1 0 yes at least one time
32 1 0 0 yes at least one time
33 0 0 0 Always no
34 0 1 1 yes at least one time
35 1 1 0 yes at least one time
36 1 1 1 yes at least one time
37 1 1 1 yes at least one time
38 0 1 1 yes at least one time
39 1 1 0 yes at least one time
40 0 1 0 yes at least one time
41 1 1 0 yes at least one time
42 1 1 1 yes at least one time
43 1 0 1 yes at least one time
44 1 0 0 yes at least one time
45 1 1 0 yes at least one time
46 1 0 0 yes at least one time
47 0 0 0 Always no
48 0 1 0 yes at least one time
49 1 0 0 yes at least one time
50 1 1 1 yes at least one time
51 0 1 1 yes at least one time
52 1 1 1 yes at least one time
53 0 0 0 Always no
54 0 0 1 yes at least one time
55 0 1 0 yes at least one time
56 0 0 0 Always no
57 0 1 0 yes at least one time
58 1 0 0 yes at least one time
59 1 0 0 yes at least one time
60 0 0 1 yes at least one time
61 1 0 1 yes at least one time
.........