[英]Count # of IDs that meet both criteria
我有一個包含兩列的數據集。 一個是用戶標識,另一個是公司類型,如下所示:
userid company.type
1 A
2 A
3 C
1 B
2 B
3 B
4 A
我想知道有A和B或A和C(但不是B和C)的company.type的唯一用戶ID有多少個。
我假設它是某種聚合函數,但是我不確定如何將company.type的限定符放置為A和B或A和C。
我們可以使用table
使用base R
tbl <- table(df1) > 0
sum(((tbl[, 1] & tbl[,2]) | (tbl[,1] & tbl[,3])) & (!(tbl[,2] & tbl[,3])))
#[1] 2
這是dplyr
的一個想法。 setequal
檢查兩個向量是否由相同的元素組成,而不考慮順序:
library(dplyr)
df %>%
group_by(userid) %>%
summarize(temp = setequal(company.type, c("A", "B")) |
setequal(company.type, c("A", "C"))) %>%
pull(temp) %>%
sum()
# [1] 2
數據:
df <- structure(list(userid = c(1L, 2L, 3L, 1L, 2L, 3L, 4L), company.type = c("A",
"A", "C", "B", "B", "B", "A")), .Names = c("userid", "company.type"
), class = "data.frame", row.names = c(NA, -7L))
對DF
排序,並使用一個由逗號分隔的公司類型字符串組成的types
列,將其減少到每個用戶ID一行。 然后使用指示的條件對其進行過濾。 最后使用tally
來獲得過濾后剩余的行數。 要獲取詳細信息,請忽略tally
行。
library(dplyr)
DF %>%
arrange(userid, company.type) %>%
group_by(userid) %>%
summarize(types = toString(company.type)) %>%
ungroup %>%
filter(grepl("A.*B|A.*C", types) & ! grepl("B.*C", types)) %>%
tally
贈送:
# A tibble: 1 x 1
n
<int>
1 2
可重復使用的輸入為:
Lines <- "userid company.type
1 A
2 A
3 C
1 B
2 B
3 B
4 A"
DF <- read.table(text = Lines, header = TRUE)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.