如何在 R 脚本的列中绘制特定数据点

  • 本文关键字:绘制 数据 脚本 r csv rscript
  • 更新时间 :
  • 英文 :


假设有两列,一列表示 p 值,另一列表示斜率。我想找到一种方法来仅绘制具有显著 p 值的斜率数据点。这是我的代码:

print("State the file name (include .csv)")
filename <- readline()
file <- read.csv(filename)
print ("Only include trials with p-value < .05? (enter yes or no)")
pval_filter <- readline()
if (pval_filter == "yes"){
   i <- 0
   count <- 0
   filtered <- NULL
   while (i > length(file$pval)){
      if (file$pval[i] < .05){
         filtered[count] <- i
         count <- count + 1
      }
      i <- i + 1
   }
   x <- 0
   while (x != -1){
      print("State the variable to be plotted")
      temp_var <- readline()
      counter <- 0
      var <- NULL
      while (counter > length(filtered)){
         var[counter] = file [, temp_var][filtered[counter]]
         counter <- counter + 1
         }
      print ("State the title of the histogram")
      title <- readline()
      hist(var, main = title, xlab = var)
      print("Enter -1 to exit or any other number to plot another variable")
      x <- readline()
    }
}

这不是短得多,并且产生大致相同的结果:

df = read.csv('file.csv')
df = df[df$pval < 0.05,]
hist(df$value)

这至少应该让你开始。

关于代码的一些评论:

  • 您使用大量保留名称(var,文件)作为对象名称,这是一个坏主意。
  • 如果您希望程序使用用户输入,则需要在对其进行任何操作之前对其进行检查。
  • 没有必要显式循环 data.frame 中的行,R 是矢量化的(例如,请参阅上面的我如何子集化df)。这种样式看起来像 Fortran,在 R 中不需要它。

很难确切地说出你想要什么。 最好是示例是可重现的(我们可以复制/粘贴并运行,我们没有您的数据,因此不起作用)并且是最小的(您的代码中有很多我认为不涉及您的问题)。

但一些指示可能会有所帮助。

首先,readline函数有一个prompt参数,它将为你提供比print语句更好看的交互。

如果所有数据都位于数据框中,其中 p 值和坡率的列pb,则可以仅包含p<=0.05简单子集的b值,例如:

hist( mydataframe$b[ mydataframe$p <= 0.05 ] )

with( mydataframe, hist(b[p<=0.05]) )

这足以回答你的问题吗?

鉴于data = cbind(slopes, pvalues)(所以col(data) == 2

喜欢这个:

plot(data[data[ ,2] < 0.05 , ])

解释:

data[ ,2] < 0.05将返回一个 TRUE/FALSE 向量,其中包含列的长度。

因此,您将获得:

data[c(TRUE, FALSE....), ]  

从那里开始,只有数据才会被选择在它显示 TRUE 的地方。

因此,您将仅绘制 pvalue 低于 0.05 的 x 和 y。

以下是仅绘制具有有效 p 值的斜率数据点的代码:假设文件的列名将是 pval 和斜率。

# Prompt a message on the Terminal
filename <- readline("Enter the file name that have p-value and slopes (include .csv)")
# Read the filename from the terminal
file     <- read.csv(filename, header = TRUE)
# Prompt a message again on the Terminal and read the acceptance from user
pval_filter <- readline("Only include trials with p-value < .05? (enter yes or no)")    
if (to-lower(pval_filter) == "yes"){
   # Create a filtered file that contain only rows with the p-val less than that of siginificatn p-val 0.05
   file.filtered <- file[file$pval < 0.05, ]    
   # Get the title of the Histogram to be drawn for the slopes (filtered)
   hist.title <- readline("State the title of the histogram")
   # Draw histogram for the slopes with the title
   #     las = 2 parameter in the histogram below makes the slopes to be written in parpendicular to the X-axis
   #     so that, the labels will not be overlapped, easily readable. 
   hist(file.filtered$slope, main = hist.title, xlab = Slope, ylab = frequency, las = 2)
}

希望这会有所帮助。

相关内容

  • 没有找到相关文章

最新更新