0

简单的问题。考虑到下面的数据框,我想计算不同的 ID:一个用于所有记录,一个用于过滤状态。但是,%>%这里似乎不起作用。我只想有一个值作为输出(所以total这应该是 10,因为closed它应该是 5),而不是 dataframe 。两条 # 行都不起作用

dat <- data.frame (ID = as.factor(c(1:10)),
                   status = as.factor(rep(c("open","closed"))))


total <- n_distinct(dat$ID)
#closed <- dat %>% filter(status == "closed") %>% n_distinct(dat$ID)
#closed <- dat %>% filter(status == "closed") %>% n_distinct(ID)
4

2 回答 2

1

n_distinct需要一个向量作为输入,您正在传递一个数据帧。你可以做 :

library(dplyr)

dat %>% 
  filter(status == "closed") %>%
  summarise(n = n_distinct(ID))

#  n
#1 5

或不使用filter

dat %>% summarise(n = n_distinct(ID[status == "closed"]))

如果你想要一个向量而不是数据框,你可以添加%>% pull(n)到上面。

于 2020-12-17T07:53:49.957 回答
0

一个选项data.table

library(data.table)
setDT(dat)[status == "closed"][, .(n = uniqueN(ID))]
于 2020-12-17T18:16:38.527 回答