0

我试图在从 CSV 文件中读取数据时绘制雷达图。该数据的排列方式是在每 5 行从特定列读取数据后绘制雷达图。

我有基于读取特定列(例如,在下面的示例中,前 5 行)绘制雷达图的代码。如何自动化它(创建一个 for 循环),以便每读入 5 行数据,绘制一个雷达图?

我当前的代码是这样的:

require(fmsb)
range <- c(0, 2)
id5 <- c(exceldata$excelcolumn[1:5])
id5.df <- data.frame(rbind(max=range[2], min=range[1], id5)
radarchart(id5.df ...)

[1:5] 是我在绘制雷达图之前手动指定要读取的前 5 行。如何将其更改为 for 循环以每 5 行绘制一次雷达图?

谢谢!

4

1 回答 1

0

执行此操作的一种经典方法是使用巧妙的索引拆分 data.frame 的行序列。这应该适合您:

ll <- split(seq(nrow(exceldata)),cumsum(seq(nrow(exceldata))%%5==1))
lapply(ll,function(x){
        id5 <- c(exceldata$excelcolumn[x])
        id5.df <- data.frame(rbind(max=range[2], min=range[1], id5)
        radarchart(id5.df,...)
}

例如,在可重现的示例上对此进行测试。我创建了一个 20 行的 data.frame,每 5 行我创建一个雷达图。

set.seed(123)
N <- 20
dat <- data.frame(
  total=runif(N, 1, 5),
  phys=rnorm(N, 10, 2),
  psycho=sample(c(0.5, NA, 3),N,rep=TRUE),
  social=runif(N, 1, 5),
  env=sample(c(5, 2.5, 4),N,rep=TRUE))

ll <- split(seq(nrow(dat)),cumsum(seq(nrow(dat))%%5==1))
op <- par(mar=c(1, 2, 2, 1),mfrow=c(2, 2))

lapply(ll,
       function(x)radarchart(dat[x,]))
par(op)

在此处输入图像描述

于 2013-06-18T02:58:30.227 回答