首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >创建雷达图时R中的for循环

创建雷达图时R中的for循环
EN

Stack Overflow用户
提问于 2013-06-18 09:37:49
回答 1查看 616关注 0票数 0

在从CSV文件读取数据时,我正在尝试绘制雷达图。该数据以这样的方式排列,即在每5行从特定列读取数据之后绘制雷达图。

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

我当前的代码如下:

代码语言:javascript
运行
复制
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行绘制一张雷达图?

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-06-18 10:58:30

一种经典的方法是用一个聪明的index.This拆分data.frame的几行,这对您来说是可行的:

代码语言:javascript
运行
复制
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行创建一个雷达图。

代码语言:javascript
运行
复制
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)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17159350

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档