【问题标题】:R: plot histogram of all columns in a data.frameR:绘制data.frame中所有列的直方图
【发布时间】:2016-08-26 14:16:00
【问题描述】:

我是 R 的新用户,我刚刚开始使用它来查看我的数据分布,但我遇到了这个错误。我有一个数据框,我想绘制它的数字列的直方图。所以我所做的如下:

num_data <-my_data[, sapply(my_data, is.numeric)] 
for (i in 1:length(names(num_data))){
  print(i)
  hist( num_data[i], main='hist', breaks=20, prob=TRUE)
}

但我收到错误'hist.default(num_data[i], main = "hist", breaks = 20, prob = TRUE) 中的错误: 'x' 必须是数字' 我检查了 num_data[i] 的类型,它是一个数值列表。所以我不知道是什么问题。谁能给我提示一下?

【问题讨论】:

  • 尝试num_data[,i],否则sapply ing hist 函数应该可以工作
  • 或等价于num_data[[i]]。 num_data[i] 给你一个列表,而不是“数字”类的向量

标签: r dataframe histogram numeric


【解决方案1】:

并排ggplot 解决方案。

library(ggplot2)
library(tidyr)
ggplot(gather(num_data, cols, value), aes(x = value)) + 
       geom_histogram(binwidth = 20) + facet_grid(.~cols)

【讨论】:

  • 如果 df 中也有因子,则会失败。要解决此问题,您可以改为 iris %&gt;% select_if(is.numeric) %&gt;% gather(cols, value) %&gt;% ggplot(aes(x = value)) + geom_histogram() + facet_grid(.~cols)
【解决方案2】:

转换矩阵中的数据框。 假设您有数据框文件说我的数据然后使用以下命令:

new_data=data.matrix(mydata)
hist(new_data)  

【讨论】:

  • 当我尝试这样做时,它只是将所有列收集到一个数据集中,无法区分它们。
【解决方案3】:

比 hist() 更可靠的是 Hmisc 包中的直方图函数:

library(Hmisc)
hist.data.frame(num_data)

这应该打印数据框中所有列的直方图。

【讨论】:

  • 但它不会覆盖它们。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-02-18
  • 2015-07-12
  • 1970-01-01
  • 1970-01-01
  • 2014-04-11
  • 2023-03-04
  • 1970-01-01
相关资源
最近更新 更多