R如何用集合论对列值进行分组
我有这样的数据集:R如何用集合论对列值进行分组,r,dplyr,R,Dplyr,我有这样的数据集: VisitID | Item | 1 | A | 1 | B | 1 | C | 1 | D | 2 | A | 2 | D | 2 | B | 3 | B | 3 | C | 4 | D | 4 | C | VisitID | Item | Classification | 1
VisitID | Item |
1 | A |
1 | B |
1 | C |
1 | D |
2 | A |
2 | D |
2 | B |
3 | B |
3 | C |
4 | D |
4 | C |
VisitID | Item | Classification |
1 | A | A&B&C |
1 | B | A&B&C |
1 | C | A&B&C |
1 | D | A&B&C |
2 | A | A&B |
2 | D | A&B |
2 | B | A&B |
3 | B | B&C |
3 | C | B&C |
4 | D | C only |
4 | C | C only |
我想根据集合论条件为项目创建一个分类列:
VisitID仅包含A、B、C、A&B、A&C、B&C、A&B&C和其他(A、B、C均不存在)
结果应该如下所示:
VisitID | Item |
1 | A |
1 | B |
1 | C |
1 | D |
2 | A |
2 | D |
2 | B |
3 | B |
3 | C |
4 | D |
4 | C |
VisitID | Item | Classification |
1 | A | A&B&C |
1 | B | A&B&C |
1 | C | A&B&C |
1 | D | A&B&C |
2 | A | A&B |
2 | D | A&B |
2 | B | A&B |
3 | B | B&C |
3 | C | B&C |
4 | D | C only |
4 | C | C only |
如何在R中实现这一点,尤其是使用dplyr?我们可以编写一个自定义函数:
paste_values <- function(x) {
x1 <- x[x %in% c("A", "B", "C")]
if (n_distinct(x1) == 1)
#If want to keep in base R
#if (length(unique(x1) == 1)
paste0(unique(x1), " only")
else
paste0(unique(x1), collapse = " & ")
}
粘贴值%mutate(项=粘贴值(项))
#VisitID项目
#
#1 A&B&C
#2.1 A&B&C
#3.1 A&B&C
#4.1 A&B&C
#5.2 A&B酒店
#6.2 A&B酒店
#7.2 A&B酒店
#8.3 B&C酒店
#9.3 B&C酒店
#仅限10.4 C
#仅限11.4 C
我们也可以在base R中使用相同的函数:
df$Item <- with(df, ave(Item, VisitID, FUN = paste_values))
df$Item您可以使用数据的左联接和分组依据、筛选、汇总的数据
library(dplyr)
data %>% left_join(
group_by(data, VisitID) %>%
distinct(VisitID, Item) %>%
filter(Item %in% c("A","B","C")) %>%
summarise(set=paste0(Item, collapse="&")),
by="VisitID")
输出:
VisitID Item set
1 1 A A&B&C
2 1 B A&B&C
3 1 C A&B&C
4 1 D A&B&C
5 2 A A&B
6 2 D A&B
7 2 B A&B
8 3 B B&C
9 3 C B&C
10 4 D C
11 4 C C
12 5 D <NA>
13 5 E <NA>
所以您只对项中的A、B和C值感兴趣,而想忽略其余的值?这是正确的。