【问题标题】:multiple plot for customized subset data in RR中自定义子集数据的多重绘图
【发布时间】:2019-08-06 19:54:32
【问题描述】:

对于以下数据集,我可以为每个 ID 创建图。有六个 ID,每个重复 4 次。

data=data.frame(ID=rep(1:6,each=4), y.value=c(1:24), x.value=seq(0,11.5, by=0.5))

setwd("C:/Users/mnudd/Desktop")
pdf(file = "myplot.pdf")
for( id.no in 1:6){
  plot(data$y.value[data$ID==id.no]~data$x.value[data$ID== id.no],xlim=c(0,12),ylim=c(0,25),type="l",col="black",
       xlab="time", ylab= "",main = paste("ID number", id.no), data=data)
  points(data$y.value[data$ID==id.no]~data$x.value[data$ID==id.no])
}
dev.off()

现在我想为以下子集 data1 创建相同的图,

data1=data[data$ID  %in% c(1,3,4),]
setwd("C:/Users/mnudd/Desktop")
pdf(file = "myplot1.pdf")
for( id.no in 1:length(unique(data1$ID))){
  plot(data1$y.value[data1$ID==id.no]~data1$x.value[data1$ID== id.no],xlim=c(0,12),ylim=c(0,25),type="l",col="black",
       xlab="time", ylab= "",main = paste("ID number", id.no), data=data)
  points(data1$y.value[data1$ID==id.no]~data1$x.value[data1$ID==id.no])
}
dev.off()

从上面的代码中,我期望 pdf 文件中有三个情节,每个情节标题应该对应于第一个情节标题应该是的 id 号 ID 号 1、ID 号 3 和 ID 号 4。

很遗憾,子集数据的循环不起作用。如果子集很大,是否有任何通用循环或函数?
感谢您的帮助。

【问题讨论】:

  • 如果子集很大,是否有任何通用循环或函数?你不是已经应用了循环吗?问题是什么?您还提到 我期待三个情节 ...您没有得到预期的结果吗?
  • 子集数据的循环不起作用? @Parfait
  • 1:length(unique(data1$ID)) 更改为unique(data1$ID)
  • 是的,它正在工作。谢谢

标签: r plot subset


【解决方案1】:

考虑bytapply 的面向对象的包装器),它本质上是应用系列版本,用于循环遍历列中 unique 值的数据集:

# FULL DATA
output <- by(data, data$ID, function(sub) {
  plot(sub$y.value ~ sub$x.value, xlim=c(0,12), ylim=c(0,25), type="l", col="black",
       xlab="time", ylab= "", main = paste("ID number", sub$ID[[1]]))
  points(sub$y.value ~ sub$x.value)
})

# SUBSET DATA
data1 <- data[data$ID  %in% c(1,3,4),]

output <- by(data1, data1$ID, function(sub) {
  plot(sub$y.value ~ sub$x.value, xlim=c(0,12), ylim=c(0,25), type="l", col="black",
       xlab="time", ylab= "", main = paste("ID number", sub$ID[[1]]))
  points(sub$y.value ~ sub$x.value)
})

有一个功能:

proc_plot <- function(sub) {
  plot(sub$y.value ~ sub$x.value, xlim=c(0,12), ylim=c(0,25), type="l", col="black",
           xlab="time", ylab= "", main = paste("ID number", sub$ID[[1]]))
  points(sub$y.value ~ sub$x.value)
}

# FULL DATA
output <- by(data, data$ID, proc_plot)

# SUBSET DATA
data1 <- data[data$ID  %in% c(1,3,4),]
output <- by(data1, data1$ID, proc_plot)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多