2

我正在尝试使用循环来创建直方图,其中列名引用由于循环而通过更改列名的字符串而发生变化。我想得到column1, column2, column3,的四个直方图column4。(在我的实际示例中,这些列未命名为第 1 列,但我希望它清楚)。

For (i in 1:4){
  hist( paste("dataset$column" +i )  , main ="title") 
}

当我尝试使用粘贴时,我得到了x必须是数字的错误,但是如果我尝试只使用一个作为检查

hist( dataset$column1), main = "title")  

它工作正常,所以它不是数据本身。

4

4 回答 4

2

您可以使用apply

set.seed(001)
DF <- data.frame(column1=rnorm(100), 
                 column2=rnorm(100),
                 column3=rnorm(100),
                 column4=rnorm(100))

apply(DF, 2, hist)  # It produces one hist for each column

使用for循环

for(i in 1:ncol(DF)){
  hist(DF[, paste('column', i, sep='')],
       main=paste('Histogram', i))

}
于 2012-10-08T16:19:43.233 回答
2

我通常lapply()在这些情况下使用。这是一个例子,我也习惯于gsub()对名称进行一些修饰。

set.seed(001)
DF <- data.frame(Funky.Name.1 = rnorm(100),
                 Funky.Name.2 = rnorm(100),
                 Whoo.Whoo = rnorm(100),
                 Yee.Haw = rnorm(100))
lapply(names(DF), 
       function(x) hist(DF[, x], main = gsub("\\.", " ", x), xlab="Value"))

演示

par(mfrow = c(2, 2))这样我们就可以在一个按行填充的 2x2 网格中绘制四个图。

# par(mfrow = c(2, 2)) # 2x2 layout of all four Histograms
# lapply(names(DF), 
#        function(x) hist(DF[, x], main = gsub("\\.", " ", x), xlab="Value"))
# When you're done: dev.off()

结果:

在此处输入图像描述

于 2012-10-08T17:20:05.340 回答
1
  1. 我非常怀疑这一点:

    hist( dataset$column1), main = "title")  
    

    工作 - 你有一个额外的支架。

  2. 如果你这样做:

     paste("dataset$column" +i )
    

    你会得到一个字符串“dataset$column1”等。相反,你需要选择你想要的列:

     for (i in 1:4) {
        hist(dataset[,i]  , main ="title") 
     }
    

    选择第 1、2、3 和 4 列。

  3. 或者你可以有:

     for (i in 1:4) {
        hist(dataset[[paste0("column",i)]]  , main ="title") 
     }
    
于 2012-10-08T16:14:46.123 回答
1

for函数没有大写。并且 " +" 运算符不适用于字符值。而且您不能以您尝试的方式将数字附加到列名“stems”,但您可以计算“”运算符的参数,[[这就是“ $”运算符的真正含义。这可能取决于“数据集”的列名实际上是什么:

for (i in 1:4) {
  hist( dataset[[ paste0("column", i ) ]]  , main ="title") 
}
于 2012-10-08T16:45:52.713 回答