【发布时间】:2021-08-17 23:22:50
【问题描述】:
我想:
- 使用
across和case_when检查A1-A3 列是否== 1 - 连接 A1-A3 == 1 和的列的列名
- 用串联的列名改变一个新列
我的数据框:
df <- tribble(
~ID, ~A1, ~A2, ~A3,
1, 0, 1, 1,
2, 0, 1, 1,
3, 1, 1, 1,
4, 1, 0, 1,
5, 0, 1, 0)
期望的输出:
# A tibble: 5 x 5
ID A1 A2 A3 New_Col
<dbl> <dbl> <dbl> <dbl> <chr>
1 1 0 1 1 A2 A3
2 2 0 1 1 A2 A3
3 3 1 1 1 A1 A2 A3
4 4 1 0 1 A1 A3
5 5 0 1 0 A2
到目前为止我已经尝试过:
df %>%
rowwise() %>%
mutate(New_Col = across(A1:A3, ~ case_when(. == 1 ~ paste0("colnames(.)", collapse = " "))))
不工作输出:
ID A1 A2 A3 New_Col$A1 $A2 $A3
<dbl> <dbl> <dbl> <dbl> <chr> <chr> <chr>
1 1 0 1 1 NA colnames(.) colnames(.)
2 2 0 1 1 NA colnames(.) colnames(.)
3 3 1 1 1 colnames(.) colnames(.) colnames(.)
4 4 1 0 1 colnames(.) NA colnames(.)
5 5 0 1 0 NA colnames(.) NA
我想学什么:
- 是否可以使用
across跨多个列检查条件 - 如果是,
case_when的 ~ 之后的部分如何获取特定的列名 - 在使用
mutate、across和case_when而不是像这里那样的 3 之后,我怎样才能只得到一列。
我以为我已经能够掌握这项任务,但不知怎的,我失去了它......
【问题讨论】: