将二进制列聚合到 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'))
不知是否有人可以帮忙。 我有以下数据集,其中 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'))