如何在多个data.frame中呈现数据项的摘要?

时间:2017-03-29 13:49:59

标签: r dataframe dplyr

我打算在针对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()

在我想要的解决方案中,可以很好地报告每个组中的数据项数量。任何人都可以给我可能的想法?在此先感谢:)

1 个答案:

答案 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