首页 > 解决方案 > 如何遍历 R 中的每个列标题并将它们应用于创建图形

问题描述

我的桌子是这样的

family_group
col1 col2 col3
1    1    1 
1    2    NA
2    3    NA

我正在尝试遍历每个列标题并在函数中调用它,这样我就可以为每个标题创建一个图表

我试过这个:

for (val in colnames(family_group))
{
  print(val)
  intermediate_tables <- count(na.omit(family_group$val))
  intermediate_frequency <-count(intermediate_tables$freq)
  plot  <- ggplot(data =intermediate_frequency, aes(x=intermediate_frequency$x, width = 0.5)) +geom_bar(aes(y=intermediate_frequency$freq), stat="identity", fill='lightgreen', color = 'green') + 
    geom_smooth(aes(y=intermediate_frequency$freq), method = 'loess') + 
    labs(x = "# of Samples in family", y = "# of families")
  plot
}

打印 val 时,它确实显示“col1”、“col2”和“col3”

但是当我试图打电话给family_group $ val时,它给出了None

如何通过循环调用每一列?

谢谢

标签: rggplot2

解决方案


使用以下tidyverse函数可以替代 for 循环,您可能会发现它更简单pivot_longer()

library(tidyverse)

family_group %>%
  pivot_longer(c(col1, col2, col3), 
               names_to = "column_name", 
               values_to = "value") %>%
  ggplot(aes(value)) +
  geom_bar() +
  facet_wrap(~ column_name)

这个想法不是拥有多列,而是将所有数据重新塑造成一个很长但很窄的数据框。在此处查看有关 SO 的更多信息:如何在 R 中绘制数据框的所有列


推荐阅读