【发布时间】:2016-05-02 13:37:54
【问题描述】:
假设我有这个数据集:
test <- data.frame(thing = c(rep(1, 4),
rep(2, 4),
rep(3, 4),
rep(4, 3),
rep(5, 1)),
thing2 = c(c("a", "b", "c", "c"),
c("a", "b", "c", "d"),
c("a", "b", "b", "b"),
c("a", "b", "c"),
c("d")))
我想知道有多少个人thing2 与每个thing 相关联,所以,
test %>%
group_by(thing) %>%
summarize(nDistinct = n_distinct(thing2))
给我
thing nDistinct
1 1 3
2 2 4
3 3 2
4 4 3
5 5 1
这很好。但是,我真正感兴趣的是每个因素级别中不是 d 的不同事物的数量。
我可以重写上面的语句并包含一个filter() 以便
test %>%
group_by(thing) %>%
filter(thing2 != "d") %>%
summarize(nDistinct = n_distinct(thing2))
给我
thing nDistinct
1 1 3
2 2 3
3 3 2
4 4 3
但我忘记了当thing == 5 时,它会从结果数据框中删除。
我希望看到的是 dplyr(或其他)声明,它给了我
thing nDistinct
1 1 3
2 2 3
3 3 2
4 4 3
5 5 0
这可能吗?
我偷偷怀疑我在这里忽略了一些非常简单的事情。
【问题讨论】:
-
您始终可以使用“传统”
length(unique(thing[thing2 != "d"])) -
我知道我忽略了一些简单的事情!在这个和下面的答案之间,我把头撞在桌子上,想知道为什么我还没有看到它!
-
记住它的好策略;)