【发布时间】:2021-06-27 20:04:47
【问题描述】:
我在 R 中有以下数据框 test:
test <- data.frame(
ID = c(1,1,2,2,2),
Color = c("green","blue",rep("green",3)))
> test
ID Color
1 1 green
2 1 blue
3 2 green
4 2 green
5 2 green
我想要的输出是显示每个 ID 不同颜色数量的频率表。例如,
> desired_output
1 2 <NA>
1 1 0
我使用下面的 dplyr 代码来产生这个结果:
test_2 <- test %>%
group_by(ID) %>%
mutate(nDistColors = n_distinct(Color)) %>%
ungroup() %>%
as.data.frame() %>%
select(ID,nDistColors) %>%
distinct()
desired_output <- table(test_2$nDistColors, useNA = "always")
我经常看到这样的事情,所以我想知道是否有更好的方法来编写代码来实现这个结果。特别是我觉得我记得使用了一个不需要线条的功能:
select(ID,nDistColors) %>%
distinct()
如果我不必存储对象 test_2 也会很好,但是当我直接输入表格时,它会将格式更改为我不喜欢的 2 路频率表. 这可以避免吗?我在管道链中看不到指定我想要频率的列的方法:
test %>%
group_by(ID) %>%
mutate(nDistColors = n_distinct(Color)) %>%
ungroup() %>%
as.data.frame() %>%
select(ID,nDistColors) %>%
distinct() %>%
table(useNA = "always")
nDistColors
ID 1 2 <NA>
1 0 1 0
2 1 0 0
<NA> 0 0 0
【问题讨论】: