我打算在针对pos.score
应用自定义阈值后呈现摘要数据(每个组中的数据项数)。但是,我打算使用dplyr
函数和pipe operator
来实现这一目标。我查看了SO
以实现我的目标,而建议使用summarize
函数。但是,我使用自己的尝试来解决我的问题,但还没有达到我的解决方案。任何人都可以通过dplyr
函数或base R
指出如何实现这一目标吗?有什么方法可以轻松实现这一目标?任何的想法?
这是可重现性最小的数据:
Qualified <- list(
hotan = data.frame( begin=seq(1, by=6, len=45), end=seq(4, by=6, len=45), pos.score=sample(125, 45)),
aksu = data.frame( begin=seq(3, by=9, len=36), end=seq(6, by=9, len=36), pos.score=sample(84, 36)),
korla = data.frame( begin=seq(6, by=8, len=52), end=seq(11, by=8, len=52), pos.score=sample(172, 52))
)
以下是使用dplyr
的可能尝试,但无法使用:
bind_rows(Qualified, .id = "id") %>%
mutate(stringency = ifelse(pos.score >= 23,
"Stringent", "Weak")) %>% summarise()
在我想要的解决方案中,可以很好地报告每个组中的数据项数量。任何人都可以给我可能的想法?在此先感谢:)
答案 0 :(得分:1)
如果您希望按群组计算,则需要使用group_by
,然后告诉summarize
您希望群组中的摘要信息(在您的情况下为n()
)。
bind_rows(Qualified, .id = "id") %>%
mutate(stringency = ifelse(pos.score >= 23,
"Stringent", "Weak")) %>%
group_by(id, stringency) %>%
summarize(n = n())
# id stringency n
# aksu Stringent 25
# aksu Weak 11
# hotan Stringent 38
# hotan Weak 7
# korla Stringent 50
# korla Weak 2
如果您想要一个实际的列联表,您可以分配您的变异数据并致电table
df <- bind_rows(Qualified, .id = "id") %>%
mutate(stringency = ifelse(pos.score >= 23,
"Stringent", "Weak"))
table(df$id, df$stringency)
# Stringent Weak
# aksu 25 11
# hotan 38 7
# korla 50 2