【问题标题】:For loop with dplyr package带有 dplyr 包的 for 循环
【发布时间】:2017-11-29 21:46:21
【问题描述】:

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

使用方法错误(“group_by_”):没有适用于“字符”类对象的“group_by_”方法

我的代码:

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

 print(distribution)
}

我该如何解决这个错误?

感谢您的帮助。

【问题讨论】:

  • 您不必遍历列,只需使用 summarise_at 并传入您要汇总的列
  • group_by_at 将接受字符串,因此如果您需要循环,这是可能的。
  • 我不想对我想要自动化的每一列进行汇总
  • group_by_at 不起作用:/

标签: r dplyr


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      基于 R 的解决方案。

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

      【讨论】:

        猜你喜欢
        • 2021-09-12
        • 1970-01-01
        • 2020-02-28
        • 2021-08-05
        • 2021-10-27
        • 2016-10-15
        • 2023-03-16
        • 2013-10-08
        • 2011-05-19
        相关资源
        最近更新 更多