对于带有dplyr包的循环

时间:2017-11-29 21:46:22

标签: r dplyr

我想为我的数据框中的每个colname创建for for循环,但是我对group_by方法有错误:

usemethod(“group_by_”)出错:“group_by_”没有适用于“class”类对象的适用方法

我的代码:

for(i in colnames(creditDF)){
 distribution <- creditDF %>%
  group_by(i) %>%
  summarise(value = n()) %>%
  select(label = i, value)

 print(distribution)
}

如何解决此错误?

感谢您的帮助。

3 个答案:

答案 0 :(得分:2)

我提供了一个更加整洁的替代方案,它可以按列创建频率表并将它们绑定在一个数据框中。

library(dplyr)
library(purrr)

mtcars %>%
  map(~table(.x)) %>%
  lapply(as_tibble) %>%
  bind_rows(.id = "var")

# # A tibble: 171 x 3
#     var    .x     n
#   <chr> <chr> <int>
# 1   mpg  10.4     2
# 2   mpg  13.3     1
# 3   mpg  14.3     1
# 4   mpg  14.7     1
# 5   mpg    15     1
# 6   mpg  15.2     2
# 7   mpg  15.5     1
# 8   mpg  15.8     1
# 9   mpg  16.4     1
# 10  mpg  17.3     1
# # ... with 161 more rows

答案 1 :(得分:0)

如果我正确理解您的代码 您想要找出数据框中每列中的唯一项目,并将表格打印到控制台

for(i in colnames(creditDF)){
 distribution <- creditDF %>%
  group_by_at(.vars = i) %>%
  summarise(value = n())

 print(distribution)
}

答案 2 :(得分:0)

基础R的解决方案。

for(i in creditDF) print(as.data.frame(table(i)))