将二进制列聚合到 R 中具有不同级别的一列中

Aggregating binary columns into one column with different levels in R

不知是否有人可以帮忙。 我有以下数据集,其中 ID 已前往一些没有 ID 重复的城市:

ID    London   Paris   Rome
1       Yes     No      Yes
2       No      No      Yes
3       No      Yes     Yes
4       No      Yes     No

我想添加一个显示 ID 去过的所有城市的列,以及一个显示 ID 去过的城市数量的列,如下所示:

ID    London   Paris   Rome    All Cities      Count of Cities travelled
1       Yes     No      Yes    London, Rome                2
2       No      No      Yes     Rome                       1
3       No      Yes     Yes    Paris, Rome                 2
4       No      Yes     No     Paris                       1

我正在尝试在 R

中使用 dplyr

非常感谢您:)

你可以试试:

library(dplyr)

df %>%
  rowwise %>%
  mutate(`All Cities` = toString(names(.[-1])[which(c_across(-ID) == 'Yes')]),
         `Count of Cities travelled` = sum(c_across(-ID) == 'Yes'))

输出:

# A tibble: 4 x 6
# Rowwise: 
     ID London Paris Rome  `All Cities` `Count of Cities travelled`
  <int> <fct>  <fct> <fct> <chr>                              <int>
1     1 Yes    No    Yes   London, Rome                           2
2     2 No     No    Yes   Rome                                   1
3     3 No     Yes   Yes   Paris, Rome                            2
4     4 No     Yes   No    Paris                                  1

如果我们需要命名城市:

cities <- c('London', 'Paris', 'Rome')

df %>%
  rowwise %>%
  mutate(`All Cities` = toString(names(.[, cities])[which(c_across(all_of(cities)) == 'Yes')]),
         `Count of Cities travelled` = sum(c_across(all_of(cities)) == 'Yes'))