R:dplyr for循环按列获取摘要

R:dplyr for循环按列获取摘要,r,dplyr,R,Dplyr,如何为循环编写dplyr,该循环将为数据表对象的每列提供摘要 让我们来看一个玩具示例,以帮助说明我正在努力实现的目标和我已经尝试过的目标。我们有5个变量: str(iris) 'data.frame': 150 obs. of 5 variables: $ Sepal.Length: num 5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ... $ Sepal.Width : num 3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.

如何为循环编写
dplyr
,该循环将为
数据表
对象的每列提供摘要

让我们来看一个玩具示例,以帮助说明我正在努力实现的目标和我已经尝试过的目标。我们有5个变量:

str(iris)
'data.frame':   150 obs. of  5 variables:
 $ Sepal.Length: num  5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
 $ Sepal.Width : num  3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
 $ Petal.Length: num  1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
 $ Petal.Width : num  0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
 $ Species     : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...
我可以通过不同的
萼片长度
获得计数的摘要,如下所示:

iris %>%
    group_by(Sepal.Length) %>%
    summarise(no_rows = length(Sepal.Length))

# A tibble: 35 x 2
   Sepal.Length no_rows
          <dbl>   <int>
 1         4.30       1
 2         4.40       3
 3         4.50       1
 4         4.60       4
 5         4.70       2
 6         4.80       5
 7         4.90       6
 8         5.00      10
 9         5.10       9
10         5.20       4
# ... with 25 more rows
但我得到:

# A tibble: 1 x 2
  `names(design_mat4)[1]` no_rows
  <chr>                     <int>
1 email_status                  1
#一个tible:1 x 2
`名称(设计材料4)[1]`无行
1电子邮件\u状态1
有没有更好的方法来实现我的目标,也许是避免
for
循环的方法?是否有我可以遵循的线索或建议来为
循环编写一个有效的
?欢迎您提供代码或建议


不确定这是否重要,但请注意,我使用的是
data.table
对象,而上面的玩具示例是
data.frame
对象。我知道两者之间存在细微差别,可能会影响所需的语法。

这将在列表中显示结果

lapply(names(iris), 
       function(var){
          iris %>%
            group_by(rlang::sym(var)) %>%
            summarise(no_rows = n())
})
这里有一个来自@Frank的更好的
dplyr
答案

lapply(names(iris) %>% setNames(.,.), function(var) iris %>% count(!!as.name(var)))
和一个
数据表
答案

lapply(names(iris) %>% setNames(.,.), function(x) as.data.table(iris)[, .(n = .N), by = x])
或者在R座做

lapply(iris, function(x) aggregate(x, by = list(x), length))

如果所有变量的类型相同,解决问题的一种更简单的方法是将其重塑为长形:

库(tidyverse)
虹膜%>%
选择(-Species)%>%
聚集(变量,值)%>%
计数(变量、值)
#>#A tibble:123 x 3
#>变量值n
#>             
#>1瓣长1.00 1
#>2瓣长1.10 1
#>花瓣长1.20 2
#>4瓣长1.30 7
#>5瓣长1.40 13
#>6瓣长1.50 13
#>7瓣。长度1.60 7
#>8瓣长1.70 4
#>9瓣长1.90 2
#>10瓣长3.00 1
#> # ... 还有113行
如果包含
物种
,则
列将强制为字符

lapply(iris, function(x) aggregate(x, by = list(x), length))